我有一个混合类型的列表,我想将其折叠成一个整齐的逗号分隔字符串,以便在其他地方读取。以下是MWE:
a <- "name"
b <- as.vector(c(10))
names(b) <- c('s')
c <- as.vector(c(1, 2))
names(c) <- c('p1', 'p2')
d <- 20
r <- list(a, b, c, d)
r
# [[1]]
# [1] "name"
#
# [[2]]
# s
# 10
#
# [[3]]
# p1 p2
# 1 2
#
# [[4]]
# [1] 20
我想要这个:
# [1] '"name","10","1,2","20"'
但就我而言:
# Collapse individual elements into individual strings.
# `sapply` with `paste` works perfectly:
> sapply(r, paste, collapse = ",")
# [1] "name" "10" "1,2" "20"
# Try paste again (doesn't work):
> paste(sapply(r, paste, collapse = ","), collapse = ',')
# [1] "name,10,1,2,20"
我尝试paste0
,cat
无济于事。我能做到的唯一方法是使用write.table
并将其传递给缓冲区内存。这种方式过于复杂,而且非常容易出错。我需要让我的代码在MPI集群上运行。
答案 0 :(得分:1)
您需要添加引号 - 在sapply
只是标记后打印的引号,以显示它们是字符串。这似乎有用......
cat(paste0('"',sapply(r, paste, collapse = ','),'"',collapse=','))
"name","10","1,2","20"
如果您要写入文件,则可能需要尝试使用和不使用cat
。没有它,在终端,你会在“真实”之前得到反斜杠。引号。