Ищу обратное get()
.
Учитывая имя объекта, я хочу, чтобы символьная строка, представляющая этот объект, была извлечена непосредственно из объекта.
Тривиальный пример foo
использования функции-заполнителя для функции, которую я ищу.
z <- data.frame(x=1:10, y=1:10)
test <- function(a){
mean.x <- mean(a$x)
print(foo(a))
return(mean.x)}
test(z)
Напечатал бы:
"z"
Моя работа, которую сложнее реализовать в моей текущей проблеме:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
это то, что вам нужноget
R есть,assign
но я не уверен, что это то, что вы действительно ищете ...Ответы:
Старый трюк с заменой депарса:
Изменить: запустить его с новым тестовым объектом
Примечание: это не удастся внутри локальной функции, когда набор элементов списка передается из первого аргумента в
lapply
(и это также не удается, когда объект передается из списка, заданного вfor
-loop.) Вы можете извлечь Атрибут ".Names" и порядок обработки из результата структуры, если это был именованный вектор, который обрабатывался.источник
Мое интуитивное понимание, в котором цитата замораживает переменную или выражение из оценки, а функция deparse, которая является инверсией функции синтаксического анализа, возвращает этот замороженный символ обратно в строку
источник
Обратите внимание, что для методов печати поведение может быть другим.
Другие комментарии, которые я видел на форумах, предполагают, что последнее поведение неизбежно. Это прискорбно, если вы пишете методы печати для пакетов.
источник
print.foo=function(x){ cat(deparse(substitute(x))) }
илиprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }