0

Rには、要素の数が等しくないオブジェクトで構成されるリストがあります。例えば、

l <- list(a=c(1,2), b=3, c=4)

オブジェクトの最大長を見つける方法を理解しました。

lmax <- max(unlist(lapply(l,length)))

また、どのオブジェクトが最長ではないかを識別する方法もあります。

notlongest <- unlist(lapply(l,length)) != max(unlist(lapply(l,length)))

私が今やらなければならないこと:リスト内のオブジェクトについてnotlongest、その要素を何度も繰り返してlmax、新しいリストを取得します。つまり、オブジェクトbとcについて、それらの要素を2回繰り返すと、次のような新しいリストが得られます。

newl <- list(a=c(1,2), b=c(3,3), c=c(4,4))

関数には簡単な答えがあると思いますが、わかりlapplyません。この質問が以前に行われたことがある場合は、お詫び申し上げます。ありがとうございました!

4

2 に答える 2

3
lmax <- max(sapply(l,length))
ll <- lapply(l, function(x) c(x, rep(x, lmax-length(x)) )  )
ll
$a
[1] 1 2

$b
[1] 3 3

$c
[1] 4 4

からR 3.2.0lengths(l)の代わりに使用できますsapply(l,length)

lmax <- max(lengths(l))
于 2012-04-21T17:06:29.497 に答える
2

最も簡単な方法は、Rのリサイクルルールを使用data.frameして、リストを同じ長さのリストのリストにグループ化することです。

dat <- do.call('data.frame', l)

これで、その構造から直接操作できますが、別のリストを再度作成する場合は、別のリストに分割するために使用sapplyします。

sapply(dat, list)
于 2012-04-21T16:37:20.257 に答える