2016-06-23 17 views
-1

Ich führe ein Experiment durch, bei dem Leute eine Reihe von Tönen hören (entweder hoch oder tief) und die hohen Töne zählen. Ich habe einen Vektor, wie viele Töne (insgesamt) sie tatsächlich gehört:Speichern von Ergebnissen einer for-Schleife als Vektor in R

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

Alle Teilnehmer Subsets aus der gleichen Serie von Tönen gehört, in dieser bestimmten Reihenfolge:

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

Ich möchte genau wissen, wie viele hohe Töne jeder Teilnehmer tatsächlich hörte. Wenn sie also in diesem Beispiel insgesamt 3 Töne hörten, hörten sie nur einen hohen Ton, aber wenn sie insgesamt 5 Töne hörten, hörten sie 2 hohe Töne.

Um dies zu tun, habe ich versucht, eine for-Schleife macht die Anzahl der Vorkommen von „high“ für jeden Teilnehmer zu zählen:

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

Diese alle Zahlen richtig druckt aus hohen Tönen (in diesem Fall: 11211111121). Ich möchte jedoch diese Ausgabe als Vektor einzelner Werte erstellen und speichern.

Meine Frage ist, wie speichere ich die Ausgabe dieser for-Schleife als Vektor von Werten?

Antwort

0

Dies speichert jeden Wert als einen Eintrag in einem Vektor.

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

Es ist in der Regel am besten for Schleifen in R.

> vapply(count, function(i) sum(list[1:i] == 'high'), integer(1)) 
[1] 1 1 2 1 1 1 1 1 1 2 1 
zu vermeiden
Verwandte Themen