2016-05-02 7 views
1

Ich versuche, die folgende „Sequenz“ zu machen:Mit f() und ifelse in einem for-Schleife

0.0025,0.005, 0.010, 0.015, 0.020, 0.025, 0.030, 0.035, 0.040, 0.045, 0.050, 0.055, 0.060 

Wie Sie sehen können, nach dem ersten Wert 0,0025, die Erhöhung Wert von 0,0025 und dann kontinuierlich um 0,005. Nach dem zweiten Wert von 0,005 ist es im Wesentlichen eine Sequenz, die um 0,005 zunimmt. Die ich dachte, ich f() in

verwenden konnte, was ich dachte, wäre funktionieren würde.

matrix1 <- matrix("", nrow = 1, ncol = 13) 
    m <- for (i in 1:length(matrix1){ 

    matrix1[,i] <- ifelse(i == 1, 0.0025, ifelse(i == 2, 0.005, seq(0.01, 0.05, by = 0.005))) 
} 

Dies ist jedoch folgendes Ergebnis gibt mir:

 [,1]  [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] 
[1,] "0.0025" "0.005" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" "0.01" 

Welche ist nicht das, was ich wollen.

Irgendwelche Vorschläge?

+7

' c (0,0025, seq (0,005, 0,06, durch = 0,005)) "? –

Antwort

2

Wenn die Frage ist wirklich eine for Schleife verwenden, dann würde ich lieber if und else Anweisungen verwenden:

n <- 13 
x1 <- vector("numeric", 13) 
for (i in 1:n) { 
    if (i==1) { 
    x1[i] <- 0.0025 
    } else { 
    x1[i] <- 0.005 + (i-2)*0.005 
    } 
} 

... weil ifelse gemeint ist, auf Vektoren angewendet werden:

j <- 1:n 
x2 <- ifelse(j == 1, 0.0025, 0.005 + (j-2)*0.005) 

Aber es gibt so viele andere Möglichkeiten, um das gewünschte Ergebnis zu erhalten! Mein Favorit ist

x3 <- c(0.0025, seq(0.005, 0.06, by=0.005)) 

, denn wenn man es laut lesen, die Sie wirklich einen Vektor für die schaffen „, nach dem ersten Wert 0,0025, die Werte Anstieg von 0,0025 und dann kontinuierlich von 0,005.

+2

Oder 'c (0.0025, 0.005 * (1:12))' anstelle der 'ifelse' –

+1

Oder' c (0.0025, Folge (0.005, durch = 0.005, Länge = 12) 'falls Sie die Länge der haben Vektor, anstatt es ist Endpunkt. – Thierry