Как складывать элементы списка символов в R - PullRequest
3 голосов
/ 11 апреля 2019

У меня есть 3 списка символов, которые я хотел бы составить.

Я пробовал rbind (), rbindlist (), bind_rows (), но у меня не получается правильная конечная структура.

Мои оригинальные списки персонажей выглядят так:

list1 = list("16403074 L3 2", "16603059 L3 2")
list2 = list("0 1", "0 1")
list3 = list("1.7 0.75514 -1.62403 0.06183" ,"1.7 0.42851 0.52817 0.08137")

Я бы хотел, чтобы окончательный результат выглядел так:

"16403074 L3 2"
"0 1"
"1.7 0.75514 -1.62403 0.06183"
"16603059 L3 2" 
"0 1"
"1.7 0.42851 0.52817 0.08137" 

Таким образом, соответствующие элементы каждого списка составляются.

Ответы [ 3 ]

0 голосов
/ 11 апреля 2019

Вы можете использовать unnest() из tidyr, часть tidyverse:

library(tidyverse)

list1 = list("16403074 L3 2", "16603059 L3 2")
list2 = list("0 1", "0 1")
list3 = list("1.7 0.75514 -1.62403 0.06183" ,"1.7 0.42851 0.52817 0.08137")

data <- tibble(strings = c(list1, list2, list3))

data %>%
 unnest()
0 голосов
/ 11 апреля 2019

Вы ищете что-то вроде этого -

> cat(paste(unlist(c(list1, list2, list3))), sep="\n")

OR

> writeLines(paste(unlist(c(list1, list2, list3))), sep="\n")

16403074 L3 2
16603059 L3 2
0 1
0 1
1.7 0.75514 -1.62403 0.06183
1.7 0.42851 0.52817 0.08137
0 голосов
/ 11 апреля 2019

Предполагая, что каждый список имеет одинаковую длину, мы можем использовать

unlist(matrix(c(list1, list2, list3), , 2, byrow = TRUE))
# [1] "16403074 L3 2"                "0 1"                          "1.7 0.75514 -1.62403 0.06183"
# [4] "16603059 L3 2"                "0 1"                          "1.7 0.42851 0.52817 0.08137" 

, где хитрость заключается в первом построении

matrix(c(list1, list2, list3), , 2, byrow = TRUE)
#      [,1]                           [,2]                         
# [1,] "16403074 L3 2"                "16603059 L3 2"              
# [2,] "0 1"                          "0 1"                        
# [3,] "1.7 0.75514 -1.62403 0.06183" "1.7 0.42851 0.52817 0.08137"

Альтернативы будут

unlist(do.call(rbind, list(list1, list2, list3)))
unlist(data.table::rbindlist(list(list1, list2, list3)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...