R 以可变参数作为列表列的时间序列

R 以可变参数作为列表列的时间序列,r,tidyverse,mutate,tibble,R,Tidyverse,Mutate,Tibble,我有一个TIBLE列alpha表示AR1进程的参数: df = data_frame(alpha = seq(-.5, .5, .1)) 现在,对于alpha的每个值,我想对长度为100的AR1进程进行采样,并将这些进程作为列表列添加到df。 以下操作不起作用: df %>% mutate(ar1 = list(arima.sim(n=100, model=list(ar=alpha)))) 新列ar1的每个元素都是完全相同的过程。如何确保列ar1的每个元素都是具有相应参数alpha的

我有一个TIBLE列
alpha
表示AR1进程的参数:

df = data_frame(alpha = seq(-.5, .5, .1))
现在,对于
alpha
的每个值,我想对长度为100的AR1进程进行采样,并将这些进程作为列表列添加到
df
。 以下操作不起作用:

df %>% mutate(ar1 = list(arima.sim(n=100, model=list(ar=alpha))))

新列
ar1
的每个元素都是完全相同的过程。如何确保列
ar1
的每个元素都是具有相应参数
alpha
的ar1进程的实现?

您可以使用
lappy

library(dplyr)
df = data_frame(alpha = seq(-.5, .5, .1))

df = df %>% 
  mutate(ar1 = lapply(alpha, function(x) arima.sim(n=100, model=list(ar=x))))
或者使用
map
purr

df = df %>% 
  mutate(ar1 = purrr::map(alpha, ~ arima.sim(n=100, model=list(ar=.))))
结果:

> df
# A tibble: 11 x 2
   alpha      ar1
   <dbl>   <list>
 1  -0.5 <S3: ts>
 2  -0.4 <S3: ts>
 3  -0.3 <S3: ts>
 4  -0.2 <S3: ts>
 5  -0.1 <S3: ts>
 6   0.0 <S3: ts>
 7   0.1 <S3: ts>
 8   0.2 <S3: ts>
 9   0.3 <S3: ts>
10   0.4 <S3: ts>
11   0.5 <S3: ts>

> df$ar1 %>% lapply(head)
[[1]]
[1] -0.3514397  0.6665273  0.1932043 -0.5509680 -0.5857840 -0.6412465

[[2]]
[1] -1.3324151  0.9639404 -1.2454844  0.1048227 -0.4667547  1.2749614

[[3]]
[1] -0.2049486 -0.5751628  0.4895776  0.1538311  2.0552770 -1.3351100

[[4]]
[1] -0.1118248  0.4838552  2.7614692 -0.7824381  0.5151733  2.2416832

[[5]]
[1]  1.7293663  0.5335523 -0.4605581 -0.7785337  0.7875933 -0.8702821

[[6]]
[1]  1.15512596 -1.14722217  0.44119379  0.03748791  0.03285100 -0.05754903

[[7]]
[1]  0.5513116  1.4185419 -0.7616093  1.5258314  1.7186733 -0.9435652

[[8]]
[1] -1.0346102 -1.9515274  0.3263094 -0.9846696 -0.1100608  1.2949033

[[9]]
[1]  1.3427732  0.8074878 -2.0393332 -0.0580785  0.9315681  1.1272597

[[10]]
[1]  1.5801751  0.6694740  0.3058637 -0.8653836  0.3402794  1.3181050

[[11]]
[1]  1.7001214  2.8050716  0.6580970  3.0519142  2.3411307 -0.6577423
>df
#一个tibble:11x2
阿尔法ar1
1  -0.5 
2  -0.4 
3  -0.3 
4  -0.2 
5  -0.1 
6   0.0 
7   0.1 
8   0.2 
9   0.3 
10   0.4 
11   0.5 
>df$ar1%>%lapply(头)
[[1]]
[1] -0.3514397  0.6665273  0.1932043 -0.5509680 -0.5857840 -0.6412465
[[2]]
[1] -1.3324151  0.9639404 -1.2454844  0.1048227 -0.4667547  1.2749614
[[3]]
[1] -0.2049486 -0.5751628  0.4895776  0.1538311  2.0552770 -1.3351100
[[4]]
[1] -0.1118248  0.4838552  2.7614692 -0.7824381  0.5151733  2.2416832
[[5]]
[1]  1.7293663  0.5335523 -0.4605581 -0.7785337  0.7875933 -0.8702821
[[6]]
[1]  1.15512596 -1.14722217  0.44119379  0.03748791  0.03285100 -0.05754903
[[7]]
[1]  0.5513116  1.4185419 -0.7616093  1.5258314  1.7186733 -0.9435652
[[8]]
[1] -1.0346102 -1.9515274  0.3263094 -0.9846696 -0.1100608  1.2949033
[[9]]
[1]  1.3427732  0.8074878 -2.0393332 -0.0580785  0.9315681  1.1272597
[[10]]
[1]  1.5801751  0.6694740  0.3058637 -0.8653836  0.3402794  1.3181050
[[11]]
[1]  1.7001214  2.8050716  0.6580970  3.0519142  2.3411307 -0.6577423

map解决方案就是我一直在寻找的。谢谢