我有扩展功能,可以将结果保存到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调用此函数,那么它基本上是可行的(我得到了包含列表名称的丑陋名称,但是可以使用正则表达式修改它):
> 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.frames调用此函数。在这种情况下,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]]"
我做错了什么?如何避免使用正则表达式提及的解决方法并使代码更健壮?
答案 0 :(得分:3)
f列表中的每个数据框都命名为
lapply (names (LoDf),function(i)write.csv (my.fun1 (LoDf [[i]]),paste0 (i,'.csv')))
在手机上原谅小错误
答案 1 :(得分:3)
问题是,lapply不会提供列表中项目的名称,它只会提供项目本身。
另一种解决方案是使用<?xml version="1.0" standalone="no" ?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _FORMAT="QR_TEST.ZPL" _QUANTITY="1" _PRINTERNAME="" _JOBNAME="TEST">
<label>
<variable name="$$QR_CODE$$">QM,B0007FOO[TAB]BAR</variable>
</label>
</labels>
IMO对输入更具体,而不是依赖范围
mapply