循环并使用向量的值执行操作

car*_*e71 3 loops for-loop r

我有这个向量:

a = c(6722, 487,  5919, 179, 7305, 336, 10015, 615,  8651, 253, 679, 75,  8652, 118, 11436, 229)
Run Code Online (Sandbox Code Playgroud)

我需要用这样的值对创建一个新的向量,如下所示:

ratio = c(a[2]/a[1], a[4]/a[3], a[6]/a[5]... etc) 
Run Code Online (Sandbox Code Playgroud)

所以输出应该如下所示:

ratio    num[1:8] 0.0724 0.03024 0.04599 etc   (edited)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码:

ratio = c()
  for (i in length(a)){
    ratio[i] = a[2*i]/a[2*i-1]
  }
Run Code Online (Sandbox Code Playgroud)

得到了这个:

Error in a[0+2i] : invalid subscript type 'complex'
Run Code Online (Sandbox Code Playgroud)

在我发现R认为我的意思是i = sqrt(-1)之后,我尝试了这个:

ratio = c()
 for (i in length(a)){
    ratio[i] = a[i+i]/a[i+i-1]
  }
Run Code Online (Sandbox Code Playgroud)

产生:

> ratio
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)

然后我尝试了lapply:

lapply(a, function(x)
    a[x+i]/a[x+i-1])
Run Code Online (Sandbox Code Playgroud)

这给了我一个16个元素的列表充满了NA.

有谁知道如何做到这一点?

Dav*_*urg 7

你不需要for循环,只需尝试(不确定你* 100L最后是否需要,因为你的描述与所需的输出不匹配)

a[c(FALSE, TRUE)]/ a[c(TRUE, FALSE)] * 100L
## [1]  7.244868  3.024159  4.599589  6.140789  2.924517 11.045655  1.363847  2.002448
Run Code Online (Sandbox Code Playgroud)