Tạo vectơ được phân tách bằng dấu phẩy


88

Tôi có một vectơ số, một vectơ mà tôi đang cố chuyển thành vectơ ký tự trong đó mỗi phần tử được phân tách bằng dấu phẩy.

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

Tuy nhiên, tôi muốn đầu ra giống như sau:

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

Tôi có thiếu một số tham số từ chức năng dán không? Cứu giúp!?

Câu trả lời:


91

shQuotecó lẽ là cách tốt nhất để làm điều này. Cụ thể, điều này giúp bạn có được đầu ra như mong muốn:

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

Nếu các dấu nháy đơn vẫn ổn, bạn có thể sử dụng:

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

type="cmd"thực sự cung cấp dấu ngoặc kép, điều này thực sự hữu ích cho hầu hết các ngữ cảnh, nhưng nếu bạn thực sự muốn hiển thị nó ở đâu đó với dấu ngoặc kép không thoát, hãy catcung cấp điều đó.


2
paste(shQuote(one), collapse=", ")cung cấp [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", không phải là biến thể kèm theo trích dẫn duy nhất.
vasili111

44

Bạn nói rằng bạn muốn một vectơ ký tự với kết quả đầu ra đó, nhưng những người khác tìm thấy câu hỏi này có thể đang tìm kiếm một trong những hàm này thay thế:

Đầu tiên, một cách để có đầu ra sẵn sàng cho đầu vào R; đó sẽ là dput:

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

Thứ hai, một cách để xuất tệp csv, sẽ là write.csvhoặc write.table. Các hàm này nhận một tham số file, không được sử dụng ở đây, để xuất trực tiếp ra tệp.

> 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

Giả sử bạn muốn đầu ra của mình ở dạng chuỗi ký tự (trái ngược với vector ký tự), bạn có thể thử:

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

Điều đó cung cấp cho bạn những dấu ngoặc kép xung quanh các con số thay vì dấu ngoặc kép, nhưng về cơ bản đó là những gì bạn có vẻ muốn.

Và bạn luôn có thể thoát để nhận dấu ngoặc kép:

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

sẽ in ra những gì bạn muốn bằng dấu ngoặc kép.


4

Ngoài ra shQuote, hãy xem các chức năng sQuotedQuotecách đặt văn bản trong dấu ngoặc kép và đơn. Bạn cũng sẽ muốn thiết lập options(useFancyQuotes=FALSE)để nhận được báo giá ASCII đơn giản (một chiều).


3

Một cái gì đó tương tự với toString

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

2

Chỉ cần thêm vào câu trả lời của Noah nếu bạn muốn sử dụng pastehàm:

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

Nên cung cấp cho bạn:

[1] '1','2','3','4','5'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.