Странное поведение при передаче в `signif ()` - PullRequest
2 голосов
/ 27 апреля 2019

Я играю с некоторыми астрономическими данными и сталкиваюсь со странным поведением, когда пытаюсь передать определенные значения в 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 Ответ

3 голосов
/ 27 апреля 2019

Я разработал ответ довольно быстро после публикации вопроса.Это 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

До меня не приходило в голову, что %>% будет взаимодействовать с * таким образом.Возможно, стоит продолжать в том же духе, если кто-то столкнется с подобными проблемами.

...