R是否有类似引用的运算符,如Perl的qw()?

时间:2009-02-06 15:49:48

标签: r perl

任何人都知道R是否有像Perl的qw()之类的类似引号的运算符来生成字符向量?

6 个答案:

答案 0 :(得分:23)

不,但你可以自己写一下:

q <- function(...) {
  sapply(match.call()[-1], deparse)
}

只是为了证明它有效:

> q(a, b, c)
[1] "a" "b" "c"

答案 1 :(得分:11)

我已将此功能添加到我的Rprofile.site文件中(如果您不熟悉,请参阅?Startup

qw <- function(x) unlist(strsplit(x, "[[:space:]]+"))

qw("You can type    text here
    with    linebreaks if you
    wish")
#  [1] "You"        "can"        "type"       "text"      
#  [5] "here"       "with"       "linebreaks" "if"        
#  [9] "you"        "wish"    

答案 2 :(得分:8)

受欢迎的Hmisc package提供功能Cs()来执行此操作:

library(Hmisc)
Cs(foo,bar)
[1] "foo" "bar"

使用与hadley的答案类似的策略:

Cs
function (...) 
{
    if (.SV4. || .R.) 
        as.character(sys.call())[-1]
    else {
        y <- ((sys.frame())[["..."]])[[1]][-1]
        unlist(lapply(y, deparse))
    }
}
<environment: namespace:Hmisc>

答案 3 :(得分:5)

qw = function(s) unlist(strsplit(s,' '))

答案 4 :(得分:3)

更简单:

qw <- function(...){
as.character(substitute(list(...)))[-1]
}

答案 5 :(得分:0)

适用于传入矢量的代码段,例如v=c('apple','apple tree','apple cider'). You would get c('"apple"','"apple tree"','"apple cider"')

quoted = function(v){
    base::strsplit(paste0('"', v, '"',collapse = '/|||/'), split = '/|||/',fixed = TRUE)[[1]]
}