r - 通过管道传输到 `signif()` 时出现奇怪的行为

标签 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

这里忽略管道是否确实合适,我想了解为什么这两种方法在这些和类似的情况下给出不同的结果。我在技术性更强的工作中经常使用管道,所以这让我有点担心。

最佳答案

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

相关文章:

删除R上最后几个大写字母

( 和 = 之间的 R str_match 正则表达式

r - 使用 mutate_all 创建新列

javascript - 当有多个方法时,return 语句内的操作顺序是什么?

Lambda微积分运算符优先级

c++ - 在模板化 Rcpp 函数中调用另一个 cpp 函数

r - 箱线图中的颜色异常值多个因素

r - 如何遍历对角条状矩阵并返回每个位置的索引?

r - map + pmap,找不到变量

c - 为什么 'dereference' 和 'address of' 运算符在左边?