1

我从一个表列表开始,每个表都有相同的列名,但行数不同:

filenames<- c('name1','name2','etc')
dat<-lapply(paste(filenames,'.csv',sep=""),read.csv)

然后我为列表中的每个表命名:

names(dat)<-filenames

然后我编写了一个函数来处理数据:

myfunc<- function (data) {results.table<-some.operations(data)}

我想在“dat”中的每个表上重复运行我的函数:

lapply(filenames, function(x) myfunc(dat[[x]],x))

我正在寻找一些放入“myfunc”的行,它将为“dat”中的每个表创建一个具有唯一名称的全局输出表,以便我可以搜索这些输出。我了解全局运算符 <<- 创建了一个全局变量,但我无法弄清楚如何分配名称。我试过

name<<-results.table

但这只是将每个结果表分配给全局变量“名称”,所以最后我只有一个输出 - 函数运行的最后一个表的结果。我也试过

paste(name)<<-results.table

substitute(name)<<-results.table

无济于事。任何建议将不胜感激!

4

1 回答 1

4

lapply()已经打算将函数应用于列表的每个元素并返回结果列表 - 无需让您的函数索引该列表。我认为这就是你真正想要的,但如果我错了,请纠正我:

# Define your function - no need for assignment here
myfunc<- function (data) {some.operations(data)}

# Apply your function to each element of dat - lapply returns a list with 
# an element of each result.  Instead of assigning each result globally,
# just assign this list of results
results <- lapply(dat, myfunc)

这样,您将获得另一个不错的结果列表,您可以继续以相同的方式对其进行操作。这种方法对于 R 来说更为典型——如果您真的非常需要分配给全局环境的对象,请告诉我们原因,以便我们可以更好地定制我们的答案。

于 2012-06-26T15:24:53.857 回答