2016-06-03 2 views
0

У меня есть длинный список из другого источника, например:Есть ли способ добавить цитаты в список запятыми?

c(moses, abi, yoyoma) 

Я хочу, чтобы иметь его в качестве объекта:

a <- c("moses", "abi", "yoyoma") 

Есть ли способ сделать это без ручного добавления котировки каждому имени?

Спасибо.

+1

'куб.см <- функция (.. .) sapply (замените (...()), as.character); cc (moses, abi, yoyoma) ' – rawr

+0

' First', это не список. Это вектор значений, когда вы используете 'c'. И, когда вы читаете их в R из файла, они читаются как вектор символов. Если они этого не делают, вы всегда можете использовать 'as.character' для их преобразования. – user5249203

+1

Или 'as.character (замените (c (moses, abi, yoyoma))) [- 1]' –

ответ

2

Быстрый способ будет

cc <- function(...) sapply(substitute(...()), as.character) 

cc(moses, abi, yoyoma) 
# [1] "moses" "abi" "yoyoma" 

Более гибкое решение может быть

cc <- function(..., simplify = TRUE, evaluate = FALSE) { 
    l <- eval(substitute(alist(...))) 
    ev <- if (evaluate) eval else identity 
    sapply(l, function(x) if (is.symbol(x)) as.character(x) else ev(x), simplify = simplify) 
} 

cc(moses, abi, yoyoma) 
# [1] "moses" "abi" "yoyoma" 


cc(one, two, 'three', four = 4) 
#       four 
# "one" "two" "three"  "4" 

cc(one, two, 'three something' = rnorm(5), four = 4, simplify = FALSE) 
# [[1]] 
# [1] "one" 
# 
# [[2]] 
# [1] "two" 
# 
# $`three something` 
# rnorm(5) 
# 
# $four 
# [1] 4 

cc(one, two, 'three something' = rnorm(5), four = 4, simplify = FALSE, evaluate = TRUE) 
# [[1]] 
# [1] "one" 
# 
# [[2]] 
# [1] "two" 
# 
# $`three something` 
# [1] -1.1803114 0.3940908 -0.2296465 -0.2818132 1.3744525 
# 
# $four 
# [1] 4 
+0

очень много. Есть ли способ работать с двумя именами? например, (moses, abi, yoyo cohen) –

+0

@RamB не то, что я могу думать о том, что внешняя сторона вносит изменения в синтаксический анализатор – rawr

1

Просто используйте функцию as.character()

as.character(a) 
[1] "moses" "abi" "yoyoma" 
Смежные вопросы