Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send a text string containing double quotes to function

I'm having a problem with using double quotes while formatting text strings being sent to functions in R.

Consider an example function code:

foo <- function( numarg = 5, textarg = "** Default text **" ){ 
    print (textarg)
    val <- numarg^2 + numarg
    return(val) 
}

when running with the following input:

foo( 4, "Learning R is fun!" )

The output is:

[1] "Learning R is fun!"
[1] 20

But when I try (in various ways, as suggested here) to write "R" instead of R, I get the following outputs:

> foo( 4, "Learning R is fun!" )
[1] "Learning R is fun!"
[1] 20
> foo( 4, "Learning "R" is fun!" )
Error: unexpected symbol in "funfun( 4, "Learning "R"
> foo( 4, "Learning \"R\" is fun!" )
[1] "Learning \"R\" is fun!"
[1] 20
> foo( 4, 'Learning "R" is fun!' )
[1] "Learning \"R\" is fun!"
[1] 20

Using as.character(...) or dQuote(...) as suggested here seems to break the function because of different number of arguments.

like image 444
Khaloymes Avatar asked Nov 19 '12 07:11

Khaloymes


2 Answers

Two ways I know. First is to just use single quotes to start and end the character string:

> cat( 'Learning "R" is fun!' )
Learning "R" is fun!

Second is to escape the double quotes:

> cat( "Learning \"R\" is fun!" )
Learning "R" is fun!

Note that this works because I use cat, which is intended to output strings to the console. It seems you use print() which shows the object rather than output it

like image 51
Sacha Epskamp Avatar answered Sep 22 '22 05:09

Sacha Epskamp


You can try these approaches:

foo <- function(numarg = 5, textarg = "** Default text **" ){ 
    cat(c(textarg, "\n")) 
    val <- (numarg^2) + numarg
    return(val) 
}

foo <- function(numarg = 5, textarg = "** Default text **" ){ 
    print(noquote(textarg)) 
    val <- (numarg^2) + numarg
    return(val) 
}

foo( 4, "Learning R is fun!" )
foo( 4, 'Learning "R" is fun!' )
like image 42
Tyler Rinker Avatar answered Sep 26 '22 05:09

Tyler Rinker