R语言中是否有像Perl的qw()函数一样的引号操作符?

23

有人知道R语言是否有像Perl的qw()一样用于生成字符向量的引号操作符吗?

6个回答

26

不可以,但您可以自己编写:

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

同时为了展示它的工作原理:

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

这似乎不再起作用了。当我在我的Rstudio控制台中运行示例时,它只是挂起了。 - JerryN
@hadley 如果我想让它在逗号后面打印怎么办? - Zawir Amin

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
我在你第一次发布这个答案时将其放入了一个个人包中,并且我一直在使用它。它非常好用。谢谢。 - GSee

8

流行的Hmisc包提供了函数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>

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

3
更简单的方法是:
qw <- function(...){
as.character(substitute(list(...)))[-1]
}

1

以下代码片段适用于传入向量的情况,例如:v=c('apple','apple tree','apple cider')。你将得到c('"apple"','"apple tree"','"apple cider"')

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接