如何从函数内部重复创建全局变量,每个变量都有不同的名称?

时间:2012-06-26 15:13:49

标签: r

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

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

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

1 个答案:

答案 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来说更为典型 - 如果你真的需要分配给全球环境的对象,请告诉我们为什么这样我们可以更好地定制我们的答案。