2013-06-01 307 views
2

我想使用一個字符串作爲函數的參數,以便使用該字符串來繪製結果,但是R繪製了參數變量名稱而不是字符串值。 我嘗試了不同的解決方案(diparse,as.character ...),但仍然沒有解決方案。你有什麼主意嗎?傳遞一個字符串作爲函數參數

mcnemar_test <- function (c1,c2,class1, class2) 
{ 
    name1=label(class1) 
    name2=deparse(substitute(class2)) 

    v1 = c1$encerts 
    v2 = c2$encerts 

    e00 = sum(ifelse(v1+v2==0,1,0)) #bad classification for both 
    e01 = sum(ifelse(v1<v2,1,0)) #bad classification for 1 
    e10 = sum(ifelse(v1>v2,1,0)) #bad classification for 2 
    e11 = sum(ifelse(v1+v2==2,1,0)) #good classification for both 

    matriu <- matrix(c(e00,e01,e10,e11),nrow = 2, 
     dimnames = list(name1 = c("Disapprove", "Approve"), 
         name2 = c("Disapprove", "Approve"))) 
    print (matriu) 
    t <- mcnemar.test(matriu) 
    return (t) 
} 
mcnemar_test(classifiers.NaiveBayes,classifiers.CART,"aa","bb") 

我想看看「AA」和「BB」,但看到「NAME 1和NAME

+0

你試過'eval'嗎?很多問題在這裏這種東西 – Ben

+0

@本eval只是一個字母,遠離R地獄;最好避免,當不是真的需要 – baptiste

+0

相當正確,有較不明顯的方法,它是[慢](https://stat.ethz.ch/pipermail/r-help/2007-January/123208.html),指示[缺乏知識](http://stackoverflow.com/q/13649979/1036500),並有許多[替代品](http://www.talkstats.com/showthread.php/20974-Why-is-eval- parse-bad?p = 67452&viewfull = 1#post67452),例如[get](http://stackoverflow.com/questions/13647046/avoiding-the-infamous-evalparse-construct)和['[[']( http://stackoverflow.com/a/11025440/1036500)。你提到的一封信是什麼(我對此並不熟悉......) – Ben

回答

2

[R認爲你想要的名稱是‘NAME1’和‘NAME2’,就像如果我是創建名稱 「A」 和 「b」 的列表:

my.list <- list(a=1, b=2) 

嘗試使用structure並通過名稱爲特徵向量:

matriu <- matrix(c(e00,e01,e10,e11),nrow = 2, 
       dimnames = structure(list(c("Disapprove", "Approve"), 
              c("Disapprove", "Approve")), 
             names=c(class1, class2))) 

或者你創建列表後設置元素的名稱:

matriu <- matrix(c(e00,e01,e10,e11),nrow = 2, 
       dimnames = list(c("Disapprove", "Approve"), 
           c("Disapprove", "Approve"))) 
names(dimnames(matriu)) <- c(class1, class2) 
-1

編輯:(。)在你的函數代碼刪除標籤和deparse(替代())的嘗試,並使用此:

dimnames = setNames(list( c("Disapprove", "Approve"), 
          c("Disapprove", "Approve")), 
        c(class1, class2)) 
相關問題