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


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
Дякую! Це найелегантніше рішення
ikashnitsky

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.