Получение имен из... (точек)

В улучшении rbind метод, я хотел бы извлечь имена объектов, переданных ему, чтобы я мог генерировать уникальные идентификаторы из них.

я пробовал all.names(match.call()) но это только дает мне:

[1] "rbind"         "deparse.level" "..1"           "..2" 

Общий пример:

rbind.test <- function(...) {
  dots <- list(...)
  all.names(match.call())
}

t1 <- t2 <- ""
class(t1) <- class(t2) <- "test"
> rbind(t1,t2)
[1] "rbind"         "deparse.level" "..1"           "..2" 

В то время как я хотел бы иметь возможность получить c("t1","t2"),

Я знаю, что в общем случае нельзя получить имена объектов, переданных функциям, но похоже, что с... это может быть возможно, так как substitute(...) возвращается t1 в приведенном выше примере.

2 ответа

Решение

Использование руководства здесь Как использовать функцию многоточия R при написании вашей собственной функции?

например substitute(list(...))

и в сочетании с as.character

rbind.test <- function(...) {
  .x <-  as.list(substitute(list(...)))[-1]
  as.character(.x)
 }

Вы также можете использовать

rbind.test <- function(...){as.character(match.call(expand.dots = F)$...)}

Я взял это от Билла Данлэпа в Службе Списка Помощи R:

rbind.test <- function(...) {
    sapply(substitute(...()), as.character)
}

Я думаю, что это дает вам то, что вы хотите.

Другие вопросы по тегам