unlist для создания вектора одинаковой длины - PullRequest
0 голосов
/ 04 октября 2019

У меня есть такой список:

lst <- list(a = c("y"), b = c("A", "B", "C"), c = c("x1", "x2"))
lst

> lst
$a
[1] "y"

$b
[1] "A" "B" "C"

$c
[1] "x1" "x2"

Если я unlist это, я получаю:

unlist(lst)
> unlist(lst)
   a   b1   b2   b3   c1   c2 
 "y"  "A"  "B"  "C" "x1" "x2" 

Как я могу получить такой вектор, как:

        a         b         c 
      "y" "A, B, C"  "x1, x2" 

Редактировать: Подобный вопрос Преобразовать список списков в вектор символов был дан ответ ранее. Ответ, предложенный @ 42_ sapply( l, paste0, collapse=""), можно использовать с небольшой модификацией: sapply( l, paste0, collapse=", "). sapply(lst, toString) Ронака Шаха на мой вопрос немного более интуитивен.

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

Мы можем использовать toString, чтобы свернуть все элементы в каждом списке в строку через запятую.

sapply(lst, toString)
#     a       b       c 
#    "y" "A,B,C" "x1,x2" 

, что аналогично использованию paste с аргументом collapse как ","

sapply(lst, paste, collapse = ",")
1 голос
/ 04 октября 2019

мы можем использовать map

library(purrr)
library(stringr)
map_chr(lst, str_c, collapse=",")
1 голос
/ 04 октября 2019

Вы также можете сделать

unlist(Map(function(x) paste0(x,collapse = ","),lst))

Или

unlist(lapply(lst,function(x) paste0(x,collapse = ",")))

Или использовать purrr пакет

purrr::map_chr(lst,paste0,collapse = ",")

...