我的代码如下:
x<-read.table('1')
y<-read.table('2')
z<-read.table('2')
MyFunc<-function (data){
plot(data[1]~data[2])
title(main=substitute(data))
data.new <- some.manipulations(data)
write.csv(data.new,file=paste(substitute(data),".csv",sep=""))
}
my.list <- list(x,y,z)
lapply(mylist,MyFunc)
我希望它能为大约 25 个不同的表格生成图表和 .csv 文件。如果我单独调用它,它工作正常 - 例如,如果我执行:
MyFunc(x)
我得到一个名为“x”的图表和一个文件 x.csv 我的问题是我需要多次执行此操作,当我将所有表放在一个列表中并尝试使用 lapply 或 sapply 时,每个表都以某种方式丢失了它的名称,因此该图没有标题并且没有创建文件,因为 < em>blank.csv 不是一个可行的文件名。我还尝试连接对象:
my.list <- c(x,y,z)
这产生了同样的问题。任何帮助将不胜感激!
最佳答案
处理此类事情的通常方法是将所需的名称也发送给函数。在这种情况下,使用所需名称命名列表中的元素可能会有所帮助。也许是这样的:
f <- c('1', '2', '3')
d <- lapply(f, read.table)
names(d) <- f # optionally some other names
MyFunc <- function(dat, nam) {
plot(dat[1]~dat[2])
title(main=nam)
dat.new <- some.manipulations(dat)
write.csv(dat.new, file=paste(nam, ".csv", sep=""))
}
lapply(names(d), function(n) MyFunc(d[[n]], n))
关于r - 通过 sapply() 或 lapply() 将多个对象传递到一个函数中,同时在函数内部保持 substitute() 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125036/