20

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"

これは問題ありません。使用する場合は、無名関数の引数または引数を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関数が1つの引数のみを受け入れるためです。したがって、これはここでは機能しません...

4

1 に答える 1

7

可能な解決策:

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])
})
于 2013-08-29T12:30:27.977 に答える