Creazione di un vettore separato da virgole


89

Ho un vettore numerico, uno, che sto cercando di trasformare in un vettore di caratteri in cui ogni elemento è separato da virgole.

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

Tuttavia, voglio che l'output abbia il seguente aspetto:

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

Mi manca qualche parametro dalla funzione Incolla? Aiuto!?

Risposte:


91

shQuoteè probabilmente il modo migliore per farlo. In particolare, questo ti dà l'output che desideri:

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

Se le virgolette singole vanno bene, puoi usare:

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

type="cmd"in realtà fornisce virgolette con escape, che è ciò che è effettivamente utile per la maggior parte dei contesti, ma se vuoi davvero visualizzarle da qualche parte con virgolette senza escape, lo catfornisce.


2
paste(shQuote(one), collapse=", ")[1] "\"1\", \"2\", \"3\", \"4\", \"5\"", non una variante allegata virgoletta singola.
vasili111

44

Dici di volere un vettore di caratteri con quell'output, ma altri che trovano questa domanda potrebbero cercare invece una di queste funzioni:

Primo, un modo per preparare l'output per l'input su R; sarebbe dput:

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

Secondo, un modo per produrre un file csv, che sarebbe write.csvo write.table. Queste funzioni accettano un parametro file, non utilizzato qui, per l'output diretto in un 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"

14

Supponendo che tu voglia il tuo output in una stringa di caratteri (al contrario di un vettore di caratteri) potresti provare:

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

Questo ti dà virgolette singole intorno ai numeri piuttosto che virgolette doppie, ma è fondamentalmente ciò che sembri desiderare.

E puoi sempre scappare per ottenere virgolette doppie:

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

quello dovrebbe stampare quello che vuoi con le virgolette doppie.


4

Inoltre shQuote, vedere le funzioni sQuotee dQuoteracchiudere il testo rispettivamente tra virgolette singole e doppie. Dovrai anche impostare options(useFancyQuotes=FALSE)per ottenere virgolette ASCII semplici (unidirezionali).


3

Qualcosa di simile con toString

toString(paste0("'",1:10,"'") )

2

Solo per aggiungere alla risposta di Noah se vuoi usare la pastefunzione:

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

Dovrebbe darti:

[1] '1','2','3','4','5'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.