Реплицировать функцию с разным размером обращений

#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. Вау, какой вдохновляющий ответ! Спасибо!