Получение имен из... (точек)
В улучшении 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)
}
Я думаю, что это дает вам то, что вы хотите.