Свертывание смешанных типов в аккуратную строку через запятую - PullRequest
0 голосов
/ 11 мая 2018

У меня есть список смешанных типов, которые я хотел бы свернуть в аккуратную строку через запятую для чтения в другом месте.Вот 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.

1 Ответ

0 голосов
/ 11 мая 2018

Вы должны добавить в кавычки - те, которые напечатаны после вашего sapply, являются просто маркерами, чтобы показать, что они являются строками. Это похоже на работу ...

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

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

Возможно, вам придется попробовать с и без cat, если вы пишете в файл. Без него в терминале вы получите обратную косую черту перед «настоящими» кавычками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...