2011-03-07 15 views
8

Jeśli chcę wydrukować symbol oznaczający przedmiot w RI można używać cytatów():Computing od języka R

> X <- list() 
> print(quote(X)) 
X 
> 

Jednak jeśli mam funkcja

h <- function(Y){ 
    quote(Y) 
} 

następnie

> h(X) 
Y 
> 

Czy to możliwe, w R napisać funkcję tak, że

> h(X) 
X 

?

Odpowiedz

12
> f = function(x) print(deparse(substitute(x))) 
> f(asd) 
[1] "asd" 
> 

Dlaczego? Jak się dowiedziałeś, quote() mówi R, aby nie oceniał bloku kodu (co robi z Y). substitute() zachowuje się inaczej; jest dobry przykład pod adresem ?substitute.

6
h <- function(x) match.call()[['x']] 

h(X) 
X 
0

substitute działa również bez dodatkowych połączeń:

h <- function(x) substitute(x) 
h(X) 
X