用管道输送到`signif()`时出现奇怪的行为

时间:2019-04-27 11:22:11

标签: r dplyr operator-precedence

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

在这里传递管道是否实际上合适时,我想了解为什么在这两种情况下,这两种方法给出不同的结果。我在技术性工作中经常使用管道,因此这让我有些担心。

1 个答案:

答案 0 :(得分: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

%>%以这种方式与*进行交互之前,这并不是我真正想到的。如果有人遇到类似问题,可能值得保持这一点。