Создание вектора, разделенного запятыми


88

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

> 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" 

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

Ответы:


91

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

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

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

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

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


2
paste(shQuote(one), collapse=", ")дает [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", не заключенный в одинарную кавычку вариант.
vasili111

44

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

Во-первых, способ подготовить вывод для ввода в 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"

1
Благодарность! Это самое элегантное решение
Икашницкий 07

14

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

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

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

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

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

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


4

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



2

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

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

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

[1] '1','2','3','4','5'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.