我有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的一些基本功能.
正如曼努埃尔指出的那样,如果将变量组合成一个列表,你的生活会更容易.为此,你想要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)
归档时间: |
|
查看次数: |
27225 次 |
最近记录: |