【发布时间】:2013-09-01 18:13:57
【问题描述】:
我想在lapply 中使用一个使用标准deparse(substitute(x)) 技巧的函数。不幸的是,我只是得到了循环的论点。这是我完全没用的可重现示例:
# some test data
a <- 5
b <- 6
li <- list(a1=a,b2=b)
# my test function
tf <- function(obj){
nm <- deparse(substitute(obj))
res <- list(myName=nm)
res
}
tf(a)
#returns
$myName
[1] "a"
这很好。如果我使用lapply,我会得到[[1L]] 或匿名函数的x 参数。
lapply(li,function(x) tf(x))
# returns
$a1
$a1$myName
[1] "x"
$b2
$b2$myName
[1] "x"
有没有办法获得以下内容?
$a1
$a1$myName
[1] "a1"
$b2
$b2$myName
[1] "b1"
如果deparse(substitute(x)) 和lapply 有更一般的信息,我也很想知道。
编辑:
这个问题与使用接受多个参数的匿名函数相反,因此可以使用对象的名称,而对象本身不起作用,因为tf 函数将只接受一个参数。所以this在这里不起作用...
【问题讨论】:
-
与大多数 R 一样,
lapply将值传递给函数,而不是变量引用。 -
感谢 James 的指点,我想我可以在这里找到类似的东西:stackoverflow.com/questions/9950144/…。我会检查它,或者删除这个重复的问题,或者在我能够回答我自己的问题后立即添加答案。
标签: r lapply substitution