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


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

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

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

5 57

5 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[1] '1','2','3','4','5'