Создание вектора через запятую - PullRequest
70 голосов
/ 14 июня 2011

У меня есть числовой вектор, который я пытаюсь превратить в символьный вектор, в котором каждый элемент разделен запятыми.

> one = c(1:5)
> paste(as.character(one), collapse=", ")
[1] "1, 2, 3, 4, 5"
> paste(as.character(one), sep="' '", collapse=", ")
[1] "1, 2, 3, 4, 5"

Однако я хочу, чтобы выходные данные выглядели так:

"1", "2", "3", "4", "5" 

Мне не хватает какого-либо параметра из функции вставки?Помогите!

Ответы [ 6 ]

75 голосов
/ 14 июня 2011

shQuote, вероятно, лучший способ сделать это.В частности, вы получите желаемый результат:

cat(paste(shQuote(one, type="cmd"), collapse=", "))

Если с одинарными кавычками все в порядке, вы можете использовать:

paste(shQuote(one), collapse=", ")

type="cmd" фактически предоставляет экранированные кавычки, что на самом делеполезно для большинства контекстов, но если вы действительно хотите отобразить его где-нибудь с неэкранированными кавычками, cat обеспечивает это.

34 голосов
/ 14 июня 2011

Вы говорите, что хотите символьный вектор с этим выводом, но другие, которые находят этот вопрос, могут вместо этого искать одну из этих функций:

Во-первых, способ подготовить вывод для ввода в R;это будет dput:

> dput(as.character(one))
c("1", "2", "3", "4", "5")

Во-вторых, способ вывода файла CSV, который будет write.csv или write.table.Эти функции принимают параметр file, который здесь не используется, для непосредственного вывода в файл.

> write.table(matrix(as.character(one),nrow=1), sep=",",
              row.names=FALSE, col.names=FALSE)
"1","2","3","4","5"

> write.csv(matrix(as.character(one),nrow=1),row.names=FALSE)
"V1","V2","V3","V4","V5"
"1","2","3","4","5"
12 голосов
/ 14 июня 2011

Предполагая, что вы хотите выводить в строке символов (в отличие от вектора символов), вы можете попробовать:

paste("'",as.character(one),"'",collapse=", ",sep="")

Это дает вам одинарные кавычки вокруг чисел, а не двойные кавычки, но это в основномто, что вы, кажется, хотите.

И вы всегда можете избежать двойных кавычек:

rs <- paste("\"",as.character(one),"\"",collapse=", ",sep="")
cat(rs)

, которые должны распечатывать то, что вы хотите с двойными кавычками.

4 голосов
/ 15 июня 2011

В дополнение к shQuote см. Функции sQuote и dQuote для переноса текста в одинарные и двойные кавычки соответственно.Вы также захотите установить options(useFancyQuotes=FALSE), чтобы получить простые (однонаправленные) кавычки ASCII.

2 голосов
/ 29 ноября 2018

Нечто подобное с toString

toString(paste0("'",1:10,"'") )
1 голос
/ 11 января 2018

Просто добавьте ответ Ноя, если вы хотите использовать функцию paste:

paste(shQuote(one, type="sh"), collapse=", ")

Должно дать вам:

[1] '1','2','3','4','5'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...