R 向函数发送包含双引号的文本字符串

R 向函数发送包含双引号的文本字符串,r,string-formatting,double-quotes,output,R,String Formatting,Double Quotes,Output,在格式化发送到R中函数的文本字符串时,我遇到了使用双引号的问题 考虑一个示例函数代码: foo <- function( numarg = 5, textarg = "** Default text **" ){ print (textarg) val <- numarg^2 + numarg return(val) } 输出为: [1] "Learning R is fun!" [1] 20 但是,当我尝试(按照建议,以各种方式)写“R”而不是R时,

在格式化发送到R中函数的文本字符串时,我遇到了使用双引号的问题

考虑一个示例函数代码:

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

[1] "Learning R is fun!"
[1] 20
但是,当我尝试(按照建议,以各种方式)写“R”而不是R时,我得到了以下输出:

> 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

按照建议使用
作为.character(…)
dQuote(…)
似乎会因为参数数量不同而中断函数。

我知道两种方法。首先是仅使用单引号来开始和结束字符串:

> cat( 'Learning "R" is fun!' )
Learning "R" is fun!
第二个是避开双引号:

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

请注意,这是因为我使用了
cat
,它用于将字符串输出到控制台。您似乎使用了显示对象而不是输出对象的
print()
,您可以尝试以下方法:

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!' )

foo当我尝试在向函数发送文本时使用
cat
时,文本格式正确(使用您的任何建议),只是这一次,它输出
学习“R”很有趣!空
而不是
学习“R”很有趣。知道如何终止添加的
NULL
吗?(更重要的是,你知道它是从哪里来的吗?)谢谢!他们都工作!我注意到我可以使用
cat(textarg,“\n”)
而不是使用
cat(c(textarg,“\n”)
将输出格式化为数组。首选哪一种?
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!' )