Есть ли в R операторы, подобные кавычкам, такие как Perl's qw ()? - PullRequest
21 голосов
/ 06 февраля 2009

Кто-нибудь знает, есть ли в R операторы, подобные кавычкам, такие как Perl qw() для генерации векторов символов?

Ответы [ 6 ]

23 голосов
/ 31 июля 2009

Нет, но вы можете написать это сами:

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

И просто чтобы показать, что это работает:

> q(a, b, c)
[1] "a" "b" "c"
11 голосов
/ 04 апреля 2012

Я добавил эту функцию в мой файл 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"    
8 голосов
/ 29 июня 2011

Популярный пакет Hmisc предлагает для этого функцию Cs():

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

, которая использует стратегию, аналогичную ответу Хадли:

Cs
function (...) 
{
    if (.SV4. || .R.) 
        as.character(sys.call())[-1]
    else {
        y <- ((sys.frame())[["..."]])[[1]][-1]
        unlist(lapply(y, deparse))
    }
}
<environment: namespace:Hmisc>
5 голосов
/ 12 декабря 2010
qw = function(s) unlist(strsplit(s,' '))
3 голосов
/ 16 мая 2015

Еще проще:

qw <- function(...){
as.character(substitute(list(...)))[-1]
}
0 голосов
/ 05 ноября 2018

фрагмент, работающий для случая, когда передается вектор, например, 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]]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...