如何调用现有的顺序命名变量以在for循环中应用操作

时间:2012-04-24 13:32:09

标签: r

我想使用for循环将某个操作应用于几个(顺序命名的)变量,以缩短下面的代码:

for(i in 1:ncol(data)) {assign(paste('var', i, sep = '.'), my.fun(data[,i]))}

result.1 <- new.fun(var.1)
result.2 <- new.fun(var.2)
result.3 <- new.fun(var.3)
...

那么,如何调用现有变量var.1,var.2,....我也尝试过贴在这里,但那不起作用。

2 个答案:

答案 0 :(得分:7)

简短的回答:不要这样做;改为使用列表。

假设data是data.frame:

vars <- lapply(data, my.fun)
results <- lapply(vars, new.fun)

答案 1 :(得分:6)

要扩展@ Joshua的答案,如果你的数据已经存在var.1,var.2等变量中,那么你可以使用以下代码将它们组合成一个列表:

mydata <- lapply( paste('var.', 1:10, sep=''), get )

mydata <- lapply( paste0('var.',1:10), get )

mydata <- lapply( sprintf('var.%d',1:10), get )

如果您有var001,var002,......等可变名称,最后一个可以使用"var%03d"

如果您想要列出名单中的条款(不需要,但可以很好),您可以这样做:

names(mydata) <- sprintf('var.%d', 1:10)

现在,如果您想访问列表中的单个元素,可以使用mydata[[3]]mydata$var.3访问该元素。但最大的好处是您现在可以使用lapplysapplyvapply或其他工具在列表的每个元素上运行相同的功能,如果您想要保存,请复制,删除等数据,你只需要担心一个对象而不需要另一个循环。

对于未来的项目,最好先将数据直接读入或创建到列表中,而不是先创建单个变量。