我从一个表列表开始,每个表都有相同的列名,但行数不同:
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'中的每个表创建一个具有唯一名称的全局输出表,以便我可以搜索这些输出。我理解全局运算符&lt;&lt; - 创建一个全局变量,但我无法弄清楚如何分配名称。我试过了
name<<-results.table
但是这只是将每个结果表分配给全局变量'name',所以我最后只有一个输出 - 该函数运行的最后一个表的结果。我也试过
paste(name)<<-results.table
和
substitute(name)<<-results.table
无济于事。任何建议将不胜感激!
答案 0 :(得分: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来说更为典型 - 如果你真的需要分配给全球环境的对象,请告诉我们为什么这样我们可以更好地定制我们的答案。