我一直在遇到我想使用for循环动态创建变量的情况(或者使用dplyr的类似/更高效的构造)。但是,我现在还不清楚如何做到这一点。
例如,下面显示的构造我直觉地希望生成10个变量,分配数字1:10,但它不起作用。
for (i in 1:10) {paste("variable",i,sep = "") = i}
错误
Error in paste("variable", i, sep = "") = i :
target of assignment expands to non-language object
我应该用什么方法来做这件事?我假设有多种方法(包括更有效的dplyr方法)。完全披露:我对R来说比较新,非常感谢他们的帮助。谢谢!
答案 0 :(得分:0)
我自己多次遇到这个问题。解决方案是assign
命令。
for(i in 1:10){
assign(paste("variable", i, sep = ""), i)
}
如果您想将所有内容都放在一个向量中,可以使用sapply
。下面的代码将为您提供1到10的向量,每个项目的名称将为"变量i,"其中i是每个项目的价值。这可能不是使用apply
家庭的最漂亮或最优雅的方式,但我认为它应该运作得很好。
var.names <- function(x){
a <- x
names(a) <- paste0("variable", x)
return(a)
}
variables <- sapply(X = 1:10, FUN = var.names)
这种方法似乎受到青睐,因为它将所有这些变量隐藏在一个对象中,而不是分散在整个全球环境中。这可以使将来更容易调用它们,从而无需使用get
来搜索您保存的变量。
答案 1 :(得分:-2)
无需使用循环,您可以使用# user system elapsed
# 0.02 0.00 0.02
创建字符表达式,然后使用paste0
将其转换为无表达式,最后使用parse
进行评估。
eval
答案 2 :(得分:-4)
您拥有的代码实际上并不比元素向量更有用:
x<-1
for(i in 2:10){
x<-c(x,i)
}
(显然,这个例子很简单,可以使用x<-1:10
并完成。我假设你需要对每个变量进行非向量计算。