Estou procurando o inverso de get()
.
Dado o nome de um objeto, desejo que a cadeia de caracteres que representa esse objeto seja extraída diretamente do objeto.
Exemplo trivial de foo
ser o espaço reservado para a função que estou procurando.
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)
Imprimiria:
"z"
Minha solução, mais difícil de implementar no meu problema atual, é:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
é o que você está depoisget
em R éassign
, mas eu não tenho certeza se é isso que você está realmente procurando ...Respostas:
O velho truque de remoção de substituto:
Editar: executou com o novo objeto de teste
Nota: isso não terá êxito dentro de uma função local quando um conjunto de itens da lista for passado do primeiro argumento para
lapply
(e também falhará quando um objeto for passado de uma lista fornecida para umfor
loop). Você seria capaz de extrair o Atributo ".Names" e a ordem de processamento do resultado da estrutura, se fosse um vetor nomeado que estava sendo processado.fonte
Meu entendimento intuitivo Em que a citação congela a var ou expressão da avaliação e a função de separação, que é a função inversa de análise, faz com que o símbolo congelado volte para String
fonte
Observe que, para os métodos de impressão, o comportamento pode ser diferente.
Outros comentários que eu vi nos fóruns sugerem que o último comportamento é inevitável. Isso é lamentável se você estiver escrevendo métodos de impressão para pacotes.
fonte
print.foo=function(x){ cat(deparse(substitute(x))) }
ouprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }