R:在循环中创建变量

Mar*_*n H 7 r

我有11个不同长度的列表,导入R为p1,p2,p3,...,p11.现在我想从所有列表中获取rollmean(库TTR)并将结果命名为p1y,p2y,...,p11y.

这似乎是一个循环的工作,但我读到这通常不是R中的好习惯.我尝试了一些(愚蠢的)像

sample=10
for (i in 1:11){
paste("p",i,"y",sep="")<-rollmean(paste("p",i,sep=""),sample)
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.我也尝试将它与assign()结合使用,但据我所知,assign只能接受一个变量和一个值.

一如既往地让我觉得我错过了R的一些基本功能.

Ric*_*ton 8

正如曼努埃尔指出的那样,如果将变量组合成一个列表,你的生活会更容易.为此,你想要mget("多次获取"的缩写).

var_names <- paste("p", 1:11, sep = "")
p_all <- mget(var_names, envir = globalenv())
Run Code Online (Sandbox Code Playgroud)

现在只需lapply用来调用rollmean列表中的每个元素.

sample <- 10
rolling_means <- lapply(p_all, rollmean, sample)
Run Code Online (Sandbox Code Playgroud)

(另外,考虑将其重命名sample为不是函数名的东西.)

我建议将答案保留为列表,但如果您真的喜欢将单独的滚动均值变量与单独的p1匹配,那么使用p11变量list2env.

names(rolling_means) <- paste(var_names, "y", sep = "")
list2env(rolling_means, envir = globalenv())
Run Code Online (Sandbox Code Playgroud)