如何使用 lapply 从传递给函数的列表中获取 data.frame 的名称

how to get name of data.frame from list passed to function using lapply

我有一个我想扩展的功能,可以将结果保存到 csv 文件。应根据传递给此函数的 data.frame 名称生成 csv 文件的名称:

my.func1 <- function(dframe, ...){
  # PART OF CODE RESPONSIBLE FOR COMPUTATION
  # ...

  # PART OF CODE WHERE I WANT TO STORE RESULTS AS CSV
  csv <- deparse(substitute(dframe))
  csv
}

当我按照以下方式调用这个函数时,传递给这个函数的数据集的名称被正确解释:

> my.func1(mtcars)
[1] "mtcars"

但我需要为列表中的每个 data.frame 调用此函数。如果我从列表中为特定 data.frame 调用此函数,那么它基本上可以正常工作(我得到的丑陋名称也包含列表名称,但一种解决方法可能是 trim 使用正则表达式):

> LoDFs <- list(first=data.frame(y1=c(1,2,3), y2=c(4,5,6)), second=data.frame(yA=c(1,2,3), yB=c(4,5,6)))
> my.func1(LoDFs$first)
[1] "LoDFs$first"

问题是当我想为列表中的所有 data.frame 调用此函数时。在这种情况下,data.frame 的名称是乱七八糟的:

> lapply(LoDFs, my.func1)
$first
[1] "X[[i]]"

$second
[1] "X[[i]]"

> lapply(seq_along(LoDFs), function(x) { my.func1(LoDFs[[x]]) })
[[1]]
[1] "LoDFs[[x]]"

[[2]]
[1] "LoDFs[[x]]"

我哪里做错了,我怎样才能避免提到的正则表达式解决方法并使代码更健壮?

f 列表中的每个数据框都被命名为

lapply (names (LoDf),function(i)write.csv (my.fun1 (LoDf [[i]]),paste0 (i,'.csv')))

就phone所以原谅小错误

问题是 lapply 不提供列表中项目的名称,它只提供项目本身。

另一种解决方案是使用 mapply,IMO 对输入更具体,而不是依赖范围

mapply(function(L,N){write.csv(L, paste0(N,".csv"));}, L=LoDFs,N=names(LoDFs))