Mat*_*ert 19 r substitution lapply
我想使用一个使用标准deparse(substitute(x))技巧的函数lapply.不幸的是,我只是得到了循环的论证.这是我完全没用的可重复的例子:
# 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"
Run Code Online (Sandbox Code Playgroud)
这很好.如果我使用lapply我得到[[1L]]或x匿名函数的参数.
lapply(li,function(x) tf(x))
# returns
$a1
$a1$myName
[1] "x"
$b2
$b2$myName
[1] "x"
Run Code Online (Sandbox Code Playgroud)
有没有办法获得以下?
$a1
$a1$myName
[1] "a1"
$b2
$b2$myName
[1] "b1"
Run Code Online (Sandbox Code Playgroud)
如果有更一般的东西deparse(substitute(x)),lapply我也渴望知道.
编辑:问题,而不是使用接受多个参数的匿名函数,因此可以使用对象的名称和对象本身不起作用,因为该tf函数只接受一个参数.所以这在这里不起作用......
可能的解决方案:
lapply(li, function(x) {
call1 <- sys.call(1)
call1[[1]] <- as.name("names")
call1 <- call1[1:2]
nm <- eval(call1)
y <- deparse(substitute(x))
y <- gsub("\\D", "", y)
y <- as.numeric(y)
list(myname=nm[y])
})
Run Code Online (Sandbox Code Playgroud)