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

R 循环并使用向量值执行操作,r,loops,for-loop,R,Loops,For Loop,我有这个向量: a = c(6722, 487, 5919, 179, 7305, 336, 10015, 615, 8651, 253, 679, 75, 8652, 118, 11436, 229) 我需要创建一个新的向量,其值对的比率如下: ratio = c(a[2]/a[1], a[4]/a[3], a[6]/a[5]... etc) ratio num[1:8] 0.0724 0.03024 0.04599 etc (edited) 因此,输出应如下所示: r

我有这个向量:

a = c(6722, 487,  5919, 179, 7305, 336, 10015, 615,  8651, 253, 679, 75,  8652, 118, 11436, 229)
我需要创建一个新的向量,其值对的比率如下:

ratio = c(a[2]/a[1], a[4]/a[3], a[6]/a[5]... etc) 
ratio    num[1:8] 0.0724 0.03024 0.04599 etc   (edited)
因此,输出应如下所示:

ratio = c(a[2]/a[1], a[4]/a[3], a[6]/a[5]... etc) 
ratio    num[1:8] 0.0724 0.03024 0.04599 etc   (edited)
我尝试了以下代码:

ratio = c()
  for (i in length(a)){
    ratio[i] = a[2*i]/a[2*i-1]
  }
得到这个:

Error in a[0+2i] : invalid subscript type 'complex'
在我发现R认为我的意思是I=sqrt(-1)之后,我尝试了以下方法:

ratio = c()
 for (i in length(a)){
    ratio[i] = a[i+i]/a[i+i-1]
  }
产生了:

> ratio
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
然后我试着用lapply:

lapply(a, function(x)
    a[x+i]/a[x+i-1])
这给了我一个16元素的NAs列表


有人知道怎么做吗?

这里的
循环不需要
,请尝试(不确定是否需要
*100L
,因为您的描述与所需的输出不匹配)


a[2i]/a[2i-1]
-您需要将其乘以
2*i
,而不是
2i
您的示例输出是错误的<代码>a[2]/a[1]
不是7。25@Frank-是的,谢谢你的提醒。复制了百分比而不是比率。刚刚修好了,就这样!谢谢你,大卫。如果您有时间/意愿,您介意解释一下这个解决方案是如何工作的吗?非常感谢!这是一个简单的循环机制,内置于R中。如果一个较长的向量被一个较短的向量子集(例如,
cbind
ed为较短的向量),则较短的向量被循环,因此您将得到
FALSE、TRUE、FALSE、TRUE
等,直到它达到较长向量的大小。