2013-04-04 69 views
1

我希望能夠使用deparse功能,如果我這樣做我怎麼能有這樣的deparse功能工作

g = function(x) deparse(substitute(x)) 

那麼它是確定

R) g(test) 
[1] "test" 

但是,如果我想測試如果g參數是character

h = function(x) {if(is.character(x)){return(x)}; deparse(substitute(x))} 
R) h(test) 
Error in h(test) : object 'test' not found 

爲什麼會這樣,我可以解決呢?

編輯:從一個新的R --vanilla

R version 2.15.2 (2012-10-26) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 
[4] LC_NUMERIC=C 
[5] LC_TIME=English_United Kingdom.1252 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
+0

你確定嗎?你有沒有嘗試從一個乾淨的會議?哦,來吧...我會把我的sessionInfo() – statquant 2013-04-04 12:43:37

回答

4

在問題的代碼試圖評估的變量,test,即不存在,因此錯誤。試試這個:

g = function(x) { 
    x.try <- try(x, silent = TRUE) 
    if (!inherits(x.try, "try-error") && is.character(x.try)) x.try 
    else deparse(substitute(x)) 
} 

# test it out 
if (exists("test")) rm(test) 

g(test) # "test" 
g("test") # "test" 

test <- "xyz" 
g(test) # "xyz" 
g("test") # "test" 

test <- 3 
g(test) # "test" 
g("test") # "test" 
2

轉載因爲test不會在全球環境中存在。 substitute不會評估其參數,因此它不會查找對象testis.character確實評估其參數,因此在找不到test時會拋出錯誤。

h <- function(x) {if(is.character(x)) x else deparse(substitute(x))} 
test <- "hello" 
h(test) 

您如何解決您的問題取決於您希望函數在對象不存在時執行的操作。如果你希望它返回對象名稱,然後做到這一點:

h <- function(x) { 
    var <- deparse(substitute(x)) 
    if(exists(var) && is.character(x)) x else var 
} 
+0

好吧,那麼我該如何解決我的問題? – statquant 2013-04-04 12:48:32

相關問題