のようになります使用してソリューション...この周りに別のsapply()
を置くために持っています。これは私が最初に飛び出したものです。リストの各要素の長さが同じであるため、データフレームとして扱い、適用を使用することができます。私は、私はあなたのデータのあなたの記述と一致すると考えているシミュレートされたデータを用いて、以下のこのアプローチを説明する(これは三つのセンサの5回の観測のためになる):
set.seed(42)
statuses <- lapply(1:3, function(x) sample(0:1, 5, replace=TRUE))
statuses
# [[1]]
# [1] 1 1 0 1 1
#
# [[2]]
# [1] 1 1 0 1 1
#
# [[3]]
# [1] 0 1 1 0 0
status_ones <- apply(as.data.frame(statuses), 1, sum)
status_ones
# [1] 2 3 1 2 2
あなたは簡単に手動で確認することができますこれは、あなたがこの小さなで欲しい結果を提供します例。以下は、for
ループアプローチに、このアプローチの相対速度の恩恵を参照するか、sapply
にsapply
を使用することができます - 私は、より大きなサンプル(3つのセンサー1440個の観測ずつ)作成し、スピードの違いを見るためにbenchmark
を使用:
library(rbenchmark)
statuses <- lapply(1:3, function(x) sample(0:1, 1440, replace=TRUE))
benchmark(apply=apply(as.data.frame(statuses), 1, sum),
sapply=sapply(1:1440, function(x) sum(sapply(statuses, '[', x))),
loop=for (i in 1:1440) { sum(sapply(statuses, '[', i)) },
columns=c('test', 'elapsed', 'relative', 'user.self'),
order='relative')
test elapsed relative user.self
1 apply 0.883 1.000 0.660
2 sapply 6.115 6.925 5.616
3 loop 6.305 7.140 5.776
を