Подтвердить что ты не робот

Deparse (заменить (x)) в лапы?

Я хотел бы использовать функцию, использующую стандартный трюк 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, я бы тоже хотел узнать.

EDIT: Проблема в отличие от использования анонимной функции, которая принимает несколько аргументов и поэтому может использовать имя объекта и самого объекта, не работает, потому что функция tf принимает только один аргумент. Поэтому этот здесь не работает...

4b9b3361

Ответ 1

Возможное решение:

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])
})