Функция R со ссылкой на аргумент без его оценки
islands1<-islands #a named num (vector)
data.frame(island_col=names(islands1), number_col=islands1,row.names=NULL)
Это создает информационный кадр, состоящий из двух столбцов, первый содержит имена из названного вектора и называется "island_col", второй столбец содержит числа и называется "number_col". Здесь нет проблем.
Теперь предположим, что я пишу функцию, потому что у меня есть куча этих именованных векторов, которые я преобразую в кадры данных. Каждый вектор пронумерован, например, Islands1, Islands2 и т. Д.
dfunc<-function(x) data.frame(island_col=names(x), as.name(x)<-(x),row.names=NULL)
Вот функция, которая использует data.frame для преобразования именованного вектора в фрейм данных
firstdf<-dfunc(islands)
Я использую функцию на "Islands1" с именем вектора. Я хочу, чтобы числовой столбец был назван "Islands1", потому что это имя аргумента, но R не понимает этого и вместо этого пытается оценить сам аргумент. Я пробовал варианты с использованием функции paste0 и as.character, но не могу заставить его работать.
Кроме того, да, я понимаю, что все это привело к этим именованным векторам, вероятно, должно быть сделано с lapply, поэтому у меня будет список для работы на этом этапе. Я потратил много часов на этот путь (см. Мой другой вопрос), но в конечном итоге не смог заставить его работать и у меня были сроки для рассмотрения. В более общем смысле я пытаюсь лучше понять, как и когда R оценивает аргументы и как индексировать объекты.
2 ответа
Я хочу, чтобы числовой столбец был назван "Islands1", потому что это имя аргумента...
использование deparse
а также substitute
следующее
islands1 <- c(a = 1, b = 2, c = 3)
islands2 <- c(d = 3, e = 2, g = 1)
func <- function(x){
out <- data.frame(island_col = names(x), xSym = x)
names(out)[2] <- deparse(substitute(x))
out
}
func(islands1)
#R island_col islands1
#R a a 1
#R b b 2
#R c c 3
func(islands2)
#R island_col islands2
#R d d 3
#R e e 2
#R g g 1
Пытаться as.character(quote(islands1))
?quote
: "quote просто возвращает свой аргумент. Аргумент не вычисляется и может быть любым выражением R".