#r #time-series #simulation
#r #временные ряды #Симуляция
Вопрос:
Я хотел бы реплицировать функцию, которая имитирует данные временных рядов с разным размером обращений, вложенных в кластеры. Вот код для этого:
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
)). Спасибо!
Ответ №1:
Вы можете использовать Map()
для перебора изменяющихся параметров
do.call("rbind", Map(function(x,y) {
data.frame(cluster=x, tsfunc(y))
}, 1:4, c(10,20,40,80)))
Комментарии:
1. Вау, какой вдохновляющий ответ! Спасибо!