0

我在 R 中运行一个循环来查找向量的索引,当它的元素等于参考向量的元素时。

据我所知,我需要在 for 循环之前声明变量,但在这种情况下,我不知道索引向量的最终长度(参见下面的代码)。如何创建允许 R 在 for 循环期间更改其大小的变量?

我的代码摘录:

k <- 1
for(i in 1:length(Lid.time)){
  ind <- which(Net.time==Lid.time[i])
  if(length(ind)>0){
    ind.Net[k] <- ind
    k <- k+1
  }
}

关于代码的注释: Lid.time 是一个与 Net.time 长度不同的向量。我需要找到一个索引数组来告诉我 Net.time 等于 Lid.time 的位置。事先不知道ind.Net这个向量会有多长,那么如何声明这个向量ind.Net呢?

谢谢你的帮助

4

2 回答 2

2

As Dason stated, match will work just fine for that specific task:

>a <- seq(2,20,2)
   #[1]  2  4  6  8 10 12 14 16 18 20
>b <- c(4,14,18)
>match(b,a)
   #[1] 2 7 9  # The indices!
>a %in% b #shorthand logical version of match
   #[1] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE

But to answer your question of a vector of unknown length within a loop:

Vector <- c()
for(i in sample(1:100,20)) {
    if(i<50) {Vector <- append(Vector, i)}
    }
length(HowLongIsThisVector)

It will be different every time you run it because of sample.

于 2012-11-09T22:26:34.100 回答
2

不需要循环,因为它听起来像match你想要的。

a <- 1:10
b <- c(2, 7, 9)
match(a, b)
# [1] NA  1 NA NA NA NA  2 NA  3 NA
于 2012-11-09T22:14:15.650 回答