3

我的代码如下:

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 时,每个表都会以某种方式失去它的名字所以该图没有标题,并且未创建文件,因为空白.csv 不是可行的文件名。我还尝试连接对象:

my.list <- c(x,y,z)

这产生了同样的问题。任何帮助将非常感激!

4

1 回答 1

3

处理此类事情的常用方法是将所需的名称也发送给函数。在这种情况下,使用所需名称命名列表中的元素可能会有所帮助。也许是这样的:

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))
于 2012-06-20T18:10:30.293 回答