0

我想使用 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、....?我也尝试在这里粘贴,但没有奏效。

4

2 回答 2

7

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

假设data是一个data.frame:

vars <- lapply(data, my.fun)
results <- lapply(vars, new.fun)
于 2012-04-24T13:40:16.070 回答
6

要扩展@Jos​​hua 的答案,如果您的数据已经存在于 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 )

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

如果您希望列表中的术语命名(不需要,但可以很好),您可以这样做:

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

现在,如果您想访问列表中的单个元素,您可以使用mydata[[3]]或访问它mydata$var.3。但最大的优势是您现在可以使用lapplyor sapplyor or vapplyor other tools 对列表的每个元素运行相同的功能,如果您想保存、复制、删除等数据,您只需担心一个对象而不是需要另一个循环。

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

于 2012-04-24T15:50:17.493 回答