Как построить матрицу из списка парных имен со значениями - PullRequest
3 голосов
/ 08 июня 2011

У меня есть список, подобный следующему:

> l <- list(a=c("a1","a2"), b=c("b1","b2"), c="c1")
> l
$a
[1] "a1" "a2"

$b
[1] "b1" "b2"

$c
[1] "c1"

Я хотел бы преобразовать его обратно в матрицу, чтобы каждое значение было связано с соответствующим именем. В этом примере ожидаемый результат:

     [,1] [,2]
[1,] "a"  "a1"
[2,] "a"  "a2"
[3,] "b"  "b1"
[4,] "b"  "b2"
[5,] "c"  "c1"

Какой самый эффективный способ добиться этого?

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Не знаю о наиболее эффективных, но используя ваш список:

l <- list(a=c("a1","a2"), b=c("b1","b2"), c="c1")

мы можем получить длину каждого компонента, используя sapply()

lens <- sapply(l, length)

мы просто повторяемимена l lens количество раз и unlist l - здесь делается в одной строке:

cbind(rep(names(l), times = sapply(l, length)), unlist(l))

, что дает желаемый результат:

R> cbind(rep(names(l), times = sapply(l, length)), unlist(l))
   [,1] [,2]
a1 "a"  "a1"
a2 "a"  "a2"
b1 "b"  "b1"
b2 "b"  "b2"
c  "c"  "c1"
2 голосов
/ 08 июня 2011
cbind(rep(names(l), sapply(l, length)), unlist(l))

   [,1] [,2]
a1 "a"  "a1"
a2 "a"  "a2"
b1 "b"  "b1"
b2 "b"  "b2"
c  "c"  "c1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...