我在R中运行一个循环来查找向量的索引,当它的元素等于参考向量的元素时。
据我所知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?
感谢您的帮助
答案 0 :(得分:2)
不需要循环,因为它听起来像match
做你想要的。
a <- 1:10
b <- c(2, 7, 9)
match(a, b)
# [1] NA 1 NA NA NA NA 2 NA 3 NA
答案 1 :(得分:2)
正如Dason所说,match
可以很好地完成这项具体任务:
>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
但要回答一个循环中未知长度的矢量问题:
Vector <- c()
for(i in sample(1:100,20)) {
if(i<50) {Vector <- append(Vector, i)}
}
length(HowLongIsThisVector)
由于sample
每次运行它都会有所不同。