【问题标题】:Send a text string containing double quotes to function将包含双引号的文本字符串发送给函数
【发布时间】:2012-11-07 02:31:36
【问题描述】:

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

考虑一个示例函数代码:

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

使用以下输入运行时:

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

输出是:

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

但是当我尝试(以各种方式,如 here 建议的那样)写“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

按照建议使用as.character(...)dQuote(...) here 似乎会因为参数数量不同而破坏函数。

【问题讨论】:

    标签: r string-formatting double-quotes output


    【解决方案1】:

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

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

    二是转义双引号:

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

    请注意,这是因为我使用了cat,它旨在将字符串输出到控制台。看来您使用 print() 显示对象而不是输出它

    【讨论】:

    • 当我在发送文本到函数时尝试使用cat 时,文本格式正确(使用您的任何建议),只是这一次,它输出Learning "R" is fun!NULL 而不是Learning "R" is fun!。知道如何终止 NULL 添加吗? (更重要的是,知道它是从哪里来的吗?)
    【解决方案2】:

    您可以尝试以下方法:

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

    【讨论】:

    • 谢谢!他们都工作!我注意到我可以只使用cat(textarg, "\n") 而不是使用cat(c(textarg, "\n") 将输出格式化为数组。哪个是首选?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2020-01-03
    • 2019-12-23
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多