for (i in 1:49)
i <- 1
lat1 <- df1[1,6]
lat2 <- df2[i,5]
lon1 <- df1[1,7]
lon2 <- df2[i,6]
d= acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
if ((d < 8.05)){
print("true")
}else{
print("false")
}
i <- i+1}
我遇到了这个循环的问题,我试图让代码遍历每个代表df 2中的行的i但是我需要代码来搜索df1中每一行的给定条件(该列始终保持不变相同)。
我一直收到错误:
> In if ((d < 8.04672)) { ... : the condition has length > 1 and only
> the first element will be used
答案 0 :(得分:0)
你可以更有效地写这个,即没有循环:
lat1 <- df1[1,6]
lon1 <- df1[1,7]
lat2 <- df2[1:49,5]
lon2 <- df2[1:49,6]
d <- acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
d < 8.05
您使用的所有功能(sin
,cos
和acos
)都可以将矢量作为输入。基本运算符(在本例中为*
和-
)逐个元素地工作,因此这也确保您可以单独操作每个元素。因此,d
将是所有acos
值的向量。
然后你似乎想要一个逻辑向量(所有值TRUE
或FALSE
)。为此,只需将d
置于逻辑操作(>
)。由于逻辑运算符也可以采用向量,因此将根据其真值来评估所有值。