R:创建一个增加值为0.1的循环

时间:2018-06-16 12:29:23

标签: r for-loop

我想创建一个循环,将变量增加0.1并将其写入变量。 从0.10到1.每0.10跳跃

x <- c(1:10)
for (i in x)
{
  a = 0.1
  y <- a+0.1

  print(y)

}

2 个答案:

答案 0 :(得分:0)

您应该使用seq功能(请查看文档链接)

number_sequence = seq(0.1,1,0.1)
for (i in number_sequence)
{
  print(i) 
}

seq(from,to,by)我们有

  • from,to:序列的起始值和(最大值)结束值。的 长度为1,除非仅作为未命名的参数提供。

  • by:number,increment of sequence。

答案 1 :(得分:0)

您错误地构建了loop

构建loop时,for部分需要包含3个参数:计数器(i),起始索引(:之前的数字),结束索引(数字)在:之后。在{}之间出现了什么功能/调整/等等。你想做什么。

loop的一些可能变体如下:

y <- 0
jumpBy <- 0.1
for (i in 1:10) {

  y <- y + jumpBy

  print(y)

}

或者像这样,使用seq_along()函数(一般来说,使用seq_along()被认为比在此上下文中使用seq()更好):

x <- 1:10
y <- 0
jumpBy <- 0.1
for (i in seq_along(x)) {

  y <- y + jumpBy

  print(y)

}

然而,你应该像@Mislav说的那样:

y <- seq(0, 1, by = 0.1)

使用seq()的原因及其相对于loop的变化是因为它耗费的时间更少,资源更少,并且错误的可能性更低。

例如,如果我们对loopseq()进行基准测试,我们可以看到使用seq()比使用loop快3(或5)倍}:

rbenchmark::benchmark(
  "for_loop" = {
    dy <- 0
    jumpBy <- 0.1
    for (i in 1:10) {
       y <- y + jumpBy
     } }, 
  "for_loop_seq_along" = {
    x <- 1:10
    y <- 0
    jumpBy <- 0.1
    for (i in seq_along(x)) {
       y <- y + jumpBy
    }}, 
  "Seq" = {
    y <- seq(0, 1, by = 0.1)
  },
  replications = 1000, 
  columns = c(
    "test", "replications", "elapsed"))

                test replications elapsed
1           for_loop         1000    3.22
2 for_loop_seq_along         1000    5.00
3                Seq         1000    0.07