2

I would like to use a string as argument of a function in order to use this string for the plotting of the result, but R plots the argument variable name instead of its string value. I tried different solutions (diparse, as.character...) but still no solution. Do you have any idea?

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")

I would like to see "aa" and "bb" but see "name1 and name2

3
  • Have you tried eval? Lots of Q&A here on this kind of thing Commented Jun 1, 2013 at 16:24
  • @Ben eval is just one letter away from R inferno; best avoided when not really needed Commented Jun 1, 2013 at 18:28
  • Quite right, there are less obscure methods, it is slow, indicative of a lack of knowledge and there are many alternatives, such as get, and [[. What is the one letter away that you're referring to (I'm not that familiar with that text...) Commented Jun 1, 2013 at 22:34

2 Answers 2

2

R thinks you want the names to be "name1" and "name2", just like if I were to create a list with names "a" and "b":

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

Try using structure and passing the names as a character vector:

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

Or setting the names of the elements after you create the list:

matriu <- matrix(c(e00,e01,e10,e11),nrow = 2, 
                 dimnames = list(c("Disapprove", "Approve"),
                                 c("Disapprove", "Approve")))
names(dimnames(matriu)) <- c(class1, class2)
Sign up to request clarification or add additional context in comments.

Comments

-1

Edit: Within your function code drop the label(.) and deparse(substitute(.)) attempts and use this:

dimnames = setNames( list(  c("Disapprove", "Approve"),  
                            c("Disapprove", "Approve")), 
                     c(class1, class2) )

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.