33

我有一个数据框列表,并为列表中的每个元素(例如每个数据框)命名:

例如

df1 <- data.frame(x = c(1:5), y = c(11:15))  
df2 <- data.frame(x = c(1:5), y = c(11:15))  
mylist <- list(A = df1, B = df2)  

我有一个要应用于每个数据框的功能;在这个函数中,我想包含一行将结果写入文件(最终我想做更复杂的事情,比如为每个数据帧保存两个变量之间的相关性图,但我想我会从简单开始)

例如

NewVar <- function(mydata, whichVar, i) {  
mydata$newVar <- mydata[, whichVar] + 1  
write.csv(mydata, file = i)  
}

我想lapply()将此函数应用于列表中的每个数据框

就像是:

hh<-lapply(mylist, NewVar, whichVar = "y")

我不知道如何在 lapply 的上下文中分配“i”,以便i遍历数据框列表中的名称,保存多个具有不同名称的文件(在这种情况下,两个文件名为Aand B)对应于修改后的数据帧。

4

2 回答 2

13

有很多选择。例如:

  lapply(names(mylist),
         function(x)write.csv(mylist[x],
                              file =paste0(x,'.csv')))

或使用索引:

 lapply(seq_along(mylist),
     function(i)write.csv(mylist[i],
                          file =paste0(names(mylist)[i],'.csv')))
于 2013-06-10T06:49:41.723 回答
13

它将与以下lapply调用一起使用:

lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x))
于 2013-06-10T06:52:21.830 回答