2016-06-23 28 views
-1

私は一連のトーン(高音または低音のいずれか)を聞いて高音を数える人を対象とした実験を行っています。私が特に知りたいforループの結果をベクトルとして保存するR

list=c("high", "low", "low", "low", "high", "low", "high", "low", 
     "high", "high", "low", "low", "high", "low", "low") 

count=c(1, 3, 5, 4, 3, 1, 2, 4, 3, 5, 2) 

すべての参加者は、この特定の順序で、トーンの同じシリーズのサブセットを聞いた:私は、彼らが実際に聞いてどのように多くのトーン(合計で)ベクトルを持っています各参加者が実際に聞いた高音の数。したがって、この例では、合計で3つのトーンを聞くと、1つのハイトーンしか聞こえませんでしたが、合計で5つのトーンを聞くと、2つのハイトーンが聞こえました。これは、この場合、高いトーン(すべての正しい番号を出力

for (i in count){ 
    cat(length(grep("high", list[1:i]))) 
} 

は、これを行うために、私は、各参加者のために、「高」の出現回数をカウントするforループ作ってみました: 11211111121)。しかし、この出力を作成して個々の値のベクトルとして保存したいと考えています。

私の質問は、どのように値のベクトルとしてこのforループの出力を保存するのですか?

答えて

0

これは、各値を1つのエントリとしてベクトルに格納します。

tones <- c("high", "low", "low", "low", "high", "low", "high", "low", 
     "high", "high", "low", "low", "high", "low", "low") 

count <- c(1, 3, 5, 4, 3, 1, 2, 4, 3, 5, 2) 

x <- NULL 
for (i in 1:length(count)){ 
x[i] <- length(grep("high", list[1:count[i]])) 
} 

> x 
[1] 1 1 2 1 1 1 1 1 1 2 1 
0

それは

> vapply(count, function(i) sum(list[1:i] == 'high'), integer(1)) 
[1] 1 1 2 1 1 1 1 1 1 2 1 
R.

forループを避けるため、通常は最善です
関連する問題