将混合类型折叠成整齐的逗号分隔字符串

时间:2018-05-11 19:42:13

标签: r

我有一个混合类型的列表,我想将其折叠成一个整齐的逗号分隔字符串,以便在其他地方读取。以下是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"

我尝试paste0cat无济于事。我能做到的唯一方法是使用write.table并将其传递给缓冲区内存。这种方式过于复杂,而且非常容易出错。我需要让我的代码在MPI集群上运行。

1 个答案:

答案 0 :(得分:1)

您需要添加引号 - 在sapply只是标记后打印的引号,以显示它们是字符串。这似乎有用......

cat(paste0('"',sapply(r, paste, collapse = ','),'"',collapse=','))

"name","10","1,2","20"

如果您要写入文件,则可能需要尝试使用和不使用cat。没有它,在终端,你会在“真实”之前得到反斜杠。引号。