3

次の名前のリストがありますz

z<-list( list(a=1, b=2),  list(a=2, b=3), list(a=NULL, b=4))

これを data.frame に変換し、対応するaエントリが as にdata.frame割り当てられるようにしNULLます。これを行うと、

do.call( rbind, lapply( z, data.frame, stringsAsFactors=TRUE ) )

予想どおり、次のエラーが発生します。

 Error in data.frame(a = NULL, b = 4, check.names = FALSE, stringsAsFactors = TRUE) : 
 arguments imply differing number of rows: 0, 1

回避策は何ですか?

4

3 に答える 3

5

これはあなたがやろうとしていることですか?

> data.frame(do.call(rbind, z))
     a b
1    1 2
2    2 3
3 NULL 4
于 2013-06-30T07:17:52.233 に答える
2
 as.data.frame(do.call(rbind, z))
     a b
1    1 2
2    2 3
3 NULL 4
于 2013-06-30T07:18:54.103 に答える
2

リストのデータ フレームではなく、数値のデータ フレームに興味がある場合は、以下を試すことができます。

lz <- lapply(z, function(x) {
    nonnull <- sapply(x, typeof)!="NULL"
    do.call(data.frame, c(x[nonnull], stringsAsFactors=FALSE))
})

require(plyr)
df <- ldply(lz)

結果では、有効なデータフレームを形成するために sがNULLs に変換されることに注意してください。NA

> df
   a b
1  1 2
2  2 3
3 NA 4
> str(df)
'data.frame':   3 obs. of  2 variables:
 $ a: num  1 2 NA
 $ b: num  2 3 4
于 2015-06-09T02:45:10.010 に答える