この間ハマったので…
例のmidiを読んでdata.frameにするパッケージを作っていてハマったのですが、listを連結してas.data.frameにかけるときに注意が必要…
as.data.frame(rbind(list(a=1,b=2,c=7),list(e=1,f=2,g=3))) # a b c # 1 1 2 7 # 2 1 2 3 str(as.data.frame(rbind(list(a=1,b=2,c=7),list(e=1,f=2,g=3)))) # 'data.frame': 2 obs. of 3 variables: # $ a:List of 2 # ..$ : num 1 # ..$ : num 1 # $ b:List of 2 # ..$ : num 2 # ..$ : num 2 # $ c:List of 2 # ..$ : num 7 # ..$ : num 3
一方、
data.frame(list(a=c(1,2),b=c(2,3),c=c(3,4))) # a b c # 1 1 2 3 # 2 2 3 4 str(data.frame(list(a=c(1,2),b=c(2,3),c=c(3,4)))) # 'data.frame': 2 obs. of 3 variables: # $ a: num 1 2 # $ b: num 2 3 # $ c: num 3 4
なので、表示されるときはいい感じに解釈されているものの、中の構造が違うという話でした。
例のパッケージではリストを次々と足していく形でdata.frameにするわけですが、複数のlistをrbindしてからas.data.frameにしたがために列があっていないと言われ…
気を付けましょう…。