r - 通过 sapply() 或 lapply() 将多个对象传递到一个函数中,同时在函数内部保持 substitute() 的功能

标签 r

我的代码如下:

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/

相关文章:

sql - 使用 R 在 MS Access 数据库中创建新表

r - 子集的规则

R 复制到 inkscape 0.92

r - 使用 ggplot2 中子图的自定义 x,y 位置创建子图(小平面)

r - 使用 dplyr 在数据导入中仅保留一个唯一列

r - 从 R 中的字符串中提取子字符串和数字

r - 为每个组添加行

r - 在 r ggplot 中使用 scale_color_binned 时限制和中断值的自定义标签

r - SPSS 中的哪个函数模拟 R summary() 函数?

r - 使用 lpSolve 在 R 中进行线性规划消除约束