2016-09-28 5 views
0

リストに300+テーブルのリストがあり、テーブルに行がない時間をカウントしようとしています。ループの後に空の数値ベクトル

だから、そうするために私が実行しているループがある:

> while (i < 333) { 
    b <- b + (nrow(allInfo[[i]])==0) 
    i <- i + 1 
} 

私は1 iに設定されていると0ともb <- vector("numeric", 1L)の両方にBを設定しようとした「整数」に設定する試してみました。ループの最後にbの値が "数値(空)"となってしまい、これを把握することができませんでした。

なぜこのような場合に役立つでしょうか?

+0

'allInfo'のいくつかの要素はdata.frameではなく、おそらくNULLなので、' nrow(NULL) 'は' integer(0) 'で、任意の数値+整数(0) 0) '。代わりに 'NROW()'を使うか、非data.framesをフィルタリングしてみてください。 'allInfo <!allInfo [!sapply(allInfo、is、" data.frame "))]' –

答えて

0

この

while (i < 333) { 
    b <- b + (nrow(as.data.frame(allInfo[[i]]))==0) 
    i <- i + 1 
} 

リッチの答えは最高ですありません。

7

あなたが、

sum(sapply(allInfo, nrow) == 0) 

これは、リスト内の各要素の行数をつかむような単純な何かをしたいアトミックベクトルとして返される可能性があるようです。次に、整数の表現がTRUEの場合は1なので、ゼロに等しいものの数を決定し、結果の論理ベクトルを合計することができます。

+0

これは大変ありがとうございます。多くの機能がありますが、私はsとlapply関数をスキップしています。ところで、上記のコードは動作しますが、私が読んでいたファイルの最後のエントリは引き抜かれませんでしたので、うまくいきませんでした。これははるかに優れていて清潔ですが、非常に便利ですので、もう一度感謝します! – Richard

関連する問題