复制具有不同大小的案例的功能
Replicate a function with different size of cases
我想复制一个函数来模拟具有嵌套在集群中的不同大小的案例的时间序列数据。这是执行此操作的代码:
tsfunc <- function (size=10) {
ar.epsilon <- arima.sim(list(order = c(1,0,0), ar = 0.7), n = size, sd=20)
x=rnorm(size)
y=as.numeric(50 + 25*x + ar.epsilon)
data.frame(id=1:size, x=x, y=y)}
df1 <- data.frame(cluster=1,tsfunc(10))
names(df1) <- c("cluster","id","x","y")
df2 <- data.frame(cluster=2,tsfunc(20))
names(df2) <- c("cluster","id","x","y")
df3 <- data.frame(cluster=3,tsfunc(40))
names(df3) <- c("cluster","id","x","y")
df4 <- data.frame(cluster=4,tsfunc(80))
names(df4) <- c("cluster","id","x","y")
do.call("rbind", list(df1, df2, df3, df4))
我想知道是否有一种方法可以使用更简洁的代码(例如,使用 sapply
或 replicate
或 map
)。谢谢!
您可以使用 Map()
迭代更改参数
do.call("rbind", Map(function(x,y) {
data.frame(cluster=x, tsfunc(y))
}, 1:4, c(10,20,40,80)))
我想复制一个函数来模拟具有嵌套在集群中的不同大小的案例的时间序列数据。这是执行此操作的代码:
tsfunc <- function (size=10) {
ar.epsilon <- arima.sim(list(order = c(1,0,0), ar = 0.7), n = size, sd=20)
x=rnorm(size)
y=as.numeric(50 + 25*x + ar.epsilon)
data.frame(id=1:size, x=x, y=y)}
df1 <- data.frame(cluster=1,tsfunc(10))
names(df1) <- c("cluster","id","x","y")
df2 <- data.frame(cluster=2,tsfunc(20))
names(df2) <- c("cluster","id","x","y")
df3 <- data.frame(cluster=3,tsfunc(40))
names(df3) <- c("cluster","id","x","y")
df4 <- data.frame(cluster=4,tsfunc(80))
names(df4) <- c("cluster","id","x","y")
do.call("rbind", list(df1, df2, df3, df4))
我想知道是否有一种方法可以使用更简洁的代码(例如,使用 sapply
或 replicate
或 map
)。谢谢!
您可以使用 Map()
迭代更改参数
do.call("rbind", Map(function(x,y) {
data.frame(cluster=x, tsfunc(y))
}, 1:4, c(10,20,40,80)))