我一直在研究一些天文数据,当我尝试将某些值通过管道传递给 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
之前我并没有真正想到 %>%
会以这种方式与 *
交互。可能值得继续这样做,以防其他人遇到类似的问题。
关于r - 通过管道传输到 `signif()` 时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880050/