在for循环中使用seq()和ifelse

时间:2016-05-02 07:24:30

标签: r loops if-statement seq

我正在尝试制作以下“序列”:

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"

这不是我想要的。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果问题实际上是关于使用for循环,那么我宁愿使用ifelse语句:

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。