我有11个不同长度的列表,作为p1,p2,p3,...,p11导入到R中。现在,我想从所有列表中获得rollmean(库TTR),并将结果命名为p1y,p2y,...,p11y。
这似乎是循环的工作,但我读到这在R中通常不是一个好习惯。我尝试了一些(愚蠢的)方法,例如
sample=10
for (i in 1:11){
paste("p",i,"y",sep="")<-rollmean(paste("p",i,sep=""),sample)
}
这不起作用。
我也尝试将其与assign()结合使用,但是据我了解,assign只能接受一个变量和一个值。
一如既往,让我印象深刻的是我缺少R的一些基本功能。
最佳答案
正如Manuel指出的那样,如果将变量组合到一个列表中,您的生活将会更加轻松。为此,您需要mget
(“多次获得”的缩写)。
var_names <- paste("p", 1:11, sep = "")
p_all <- mget(var_names, envir = globalenv())
现在,只需使用
lapply
在列表的每个元素上调用rollmean
。sample <- 10
rolling_means <- lapply(p_all, rollmean, sample)
(此外,请考虑将
sample
重命名为还不是函数名称的名称。)我建议将答案保留在列表中,但是如果您真的很喜欢让单独的滚动均值变量与单独的p1,p11变量匹配的想法,请使用
list2env
。names(rolling_means) <- paste(var_names, "y", sep = "")
list2env(rolling_means, envir = globalenv())
关于R:循环创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914568/