管道到`signif()`时的奇怪行为

问题描述 投票:2回答:1

当我尝试将某些值传递给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

通过管道是否真的适合这里,我想了解为什么这两种方法在这些和类似情况下给出不同的结果。我在更多的技术工作中使用了很多管道,所以这对我来说有点担心。

r dplyr operator-precedence
1个回答
3
投票

在发布问题后,我很快就找到了答案。这是一个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

在此之前,我并没有真正想到%>%会以这种方式与*互动。可能值得保持这个以防万一其他人遇到类似的问题。

© www.soinside.com 2019 - 2024. All rights reserved.