2016-05-02 3 views
1

Я пытаюсь сделать следующий «последовательность»:Использование (SEQ) и IfElse в цикле

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 

Как вы можете видеть, после первого значения 0,0025, увеличение значений по 0.0025, а затем непрерывно на 0,005. Поэтому после второго значения 0,005 это, по существу, последовательность, увеличивающаяся на 0,005. Что я думал, что я мог бы использовать SEQ() в

То, что я думал, что будет работать будет:.

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))) 
} 

Это, однако, дает мне следующий результат:

 [,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" 

Который не то, что я хотеть.

Любые предложения?

+7

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

ответ

2

Если вопрос действительно об использовании for цикла, то я предпочел бы использовать if и else заявления:

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 
    } 
} 

... потому что ifelse предназначен для применения на векторах:

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

Но есть так много других способов получить требуемый результат! Мой любимый

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

, потому что, когда вы читаете вслух, вы на самом деле создать вектор, для которого «, после первого значения 0,0025, увеличение значений по 0.0025, а затем непрерывно 0.005.»

+2

Или 'c (0.0025, 0.005 * (1:12))' вместо 'ifelse' –

+1

Или' c (0.0025, secq (0.005, by = 0.005, length = 12) "в случае, если длина вектор, а не его конечную точку. – Thierry

Смежные вопросы