我想我正在为循环的每次迭代覆盖我的列表,我只是不知道如何修复它。
a <- c(-45, -345, 610, 23, 705)
for(i in a)
if(i<0){
angle = i + 360
}else if(i>360){
angle = i - 360
}
print(angle)
结果是 345 (705 - 360) 但我需要所有这些。
答案 0 :(得分:3)
您还可以使用此矢量化操作来避免循环。这是将角度缩放到 0-360 范围的另一种方法。
a <- c(-45, -345, 610, 23, 705)
angle <- (a + 360) %% 360
angle
[1] 315 15 250 23 345
答案 1 :(得分:1)
是的,这些值正在被覆盖。您需要创建一个向量来存储这些值。
a <- c(-45, -345, 610, 23, 705)
angle <- numeric(length(a))
for(i in seq_along(a)) {
if(a[i]<0){
angle[i] = a[i] + 360
}else if(a[i]>360){
angle[i] = a[i] - 360
} else {
angle[i] <- a[i]
}
}
angle
您也可以通过使用 for
包中的嵌套 ifelse
或 case_when
来避免 dplyr
循环。
dplyr::case_when(a < 0 ~ a + 360,
a > 360 ~ a - 360,
TRUE ~ a)