我的 R for 循环只打印最后一个元素

时间:2021-03-17 03:34:00

标签: r

我想我正在为循环的每次迭代覆盖我的列表,我只是不知道如何修复它。

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) 但我需要所有这些。

2 个答案:

答案 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 包中的嵌套 ifelsecase_when 来避免 dplyr 循环。

dplyr::case_when(a < 0 ~ a + 360, 
                 a > 360 ~ a - 360, 
                 TRUE ~ a)
相关问题