【问题标题】:R: Using position information of elements when looping through a vector.R:在遍历向量时使用元素的位置信息。
【发布时间】:2012-03-04 23:39:16
【问题描述】:

在遍历向量时,是否可以将元素的索引与元素一起使用?

a.vector

假设我需要 a.vector 的“第一个”“a”的索引。 一个人不能用

其中(a.vector == "a")

因为有两个 'a' 并且它会返回两个位置 1 和 4。我需要循环立即覆盖的元素的特定索引。

我需要它来做这样的事情:

b.vector

for (i in a.vector) {
    element<-b.vector[INDEX.OF(a.vector)])
-------some process using both 'element' and "a"-------}

这似乎类似于 python 中的“枚举”函数。一个解决方案会有很大帮助。谢谢。

【问题讨论】:

    标签: r loops vector indexing


    【解决方案1】:

    用索引号循环怎么样?

    for (i in seq_along(a.vector)){
       a.element <- a.vector[i]
       b.element <- b.vector[i]
       ...
    }
    

    【讨论】:

      【解决方案2】:

      使用which.max 代替which。它将挑选出自 TRUE > FALSE 以来第一个 TRUE 的位置。

       which.max(a.vector=="a")
      #[1] 1
      

      @James 可能比我更了解您的要求。您在文本末尾提出的问题确实与您在主题行中提出的问题不同,因此您可能需要澄清一下。我要补充一点,以隐藏形式传递“i”的位置及其值的概念对 R 来说是相当陌生的。人们经常问 R 是“按值传递”还是“按引用传递”。正确的答案不是......它是“通过承诺”。但是,从概念上讲,这更接近于“按值传递”,而不是“按引用传递”。 for 是一个函数,R 复制从函数调用传递到其主体的参数。除非这些信息是您实际上要求它传递的,否则不会随身携带“位置”信息。

      【讨论】:

      • 非常感谢您提供有关“路过”的信息。实际上,它是我想在路过时使用的位置信息。确实,主题行和问题有点不连贯。主题行只有在连接到循环时才有意义。这就像将手指指向向量的元素,然后询问它的索引。我在错误的意义上使用了“重新出现”这个词,它的意思是“在元素位置之前或之后出现”。对于答案,第一个 TRUE 也可以通过使用 which(...)[1] 简单地得到。希望新的子。线更好。非常感谢。
      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2018-10-13
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多