当我尝试将某些值传递给signif
时,我一直在玩一些天文数据并遇到一些奇怪的行为。
例如,在近似地球周长的背景下,signif(6400 * 2 * pi, 2)
产生40000
(正确的答案),而6400 * 2 * pi %>% signif(2)
产生39680
:
library(dplyr)
rad_earth_km <- 6400
n_digits <- 2
# Option 1 (gives the correct answer)
circ_earth_1 <- signif(rad_earth_km * 2 * pi, n_digits) # Yields 40000
# Option 2 (gives the wrong answer)
circ_earth_2 <- rad_earth_km * 2 * pi %>% signif(2) # Yields 39680
通过管道是否真的适合这里,我想了解为什么这两种方法在这些和类似情况下给出不同的结果。我在更多的技术工作中使用了很多管道,所以这对我来说有点担心。
在发布问题后,我很快就找到了答案。这是一个BIDMAS问题:
library(dplyr)
rad_earth_km <- 6400
n_digits <- 2
# Option 1 (gives the correct answer)
circ_earth_1 <- signif(rad_earth_km * 2 * pi, n_digits) # Yields 40000
# Option 2 (gives the wrong answer)
circ_earth_2 <- rad_earth_km * 2 * pi %>% signif(2) # Yields 39680
# Option 3 (given the correct answer again)
circ_earth_3 <- (rad_earth_km * 2 * pi) %>% signif(2) # Yields 40000
在此之前,我并没有真正想到%>%
会以这种方式与*
互动。可能值得保持这个以防万一其他人遇到类似的问题。