Извлечь имена фреймов данных, переданных с точками

Можно использовать комбинацию deparse(substitute()) для извлечения имени параметра внутри функции, подобной этой функции.

names_from_dots <- function(...) {
    deparse(substitute(...))
 }

data(iris)
data(swiss)

names_from_dots(iris)
#[1] "iris"
names_from_dots(swiss)
#[1] "swiss"

извлекает имя data.frame, переданное в параметре ... (точки).

Но как можно извлечь каждое имя из переданных нескольких data.frames

names_from_dots(swiss, iris)
[1] "swiss"
names_from_dots(iris, swiss)
[1] "iris"

Когда это возвращает только имя первого объекта.


person Marcin Kosiński    schedule 10.02.2016    source источник


Ответы (2)


Вы можете попробовать следующее:

names_from_dots <- function(...) sapply(substitute(list(...))[-1], deparse)

names_from_dots(swiss, iris)
# [1] "swiss" "iris" 
person A5C1D2H2I1M1N2O1R2T1    schedule 10.02.2016

Я бы вообще не стал использовать здесь substitute, он плохо работает с ...1. Вместо этого вы можете просто захватить неоцененные точки, используя:

dots = match.call(expand.dots = FALSE)$...

Затем вы можете получить аргументы внутри точек:

sapply(dots, deparse)

1 Я думаю, что частично причина в том, что substitute делает совершенно разные вещи, когда вызывается с (а) аргументом (который является «обещающим» объектом) или (б) другим объектом. ... находится где-то между этими двумя.

person Konrad Rudolph    schedule 10.02.2016