Конец длинной строки труб dplyr равен
mutate(n = if_else(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3, n))
, что дает эту ошибку
Error in mutate_impl(.data, dots) : Evaluation error: `false` must be type double, not integer.
, которая исчезнет, если я выполню любой из этихвместо двух
mutate(n = ifelse(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3, n))
mutate(n = if_else(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3L, n))
Я подумал, что будет проще сделать простой воспроизводимый отдых, поэтому я сделал то, что вы видите ниже, но я могубольше не получаю ошибку.Есть идеи, что происходит? Почему ifelse
работает там, где if_else
не работает, и почему if_else
работает, если я изменяю 3 на 3L? Я понимаю, L
принуждает 3 бытьцелое число, это правильно?
library(tidyverse)
df <- tribble(
~name, ~fruit, ~qty,
"Bob", "apple", 10,
"Bill", "apple", 10
)
# THIS WORKS AGAIN AS IT SHOULD
df %>% mutate(qty = ifelse(name == "Bob" & fruit == "apple", qty / 2, qty))
# BUT IF_ELSE DOESN'T FAIL THIS TIME, WEIRD
df %>% mutate(qty = if_else(name == "Bob" & fruit == "apple", qty / 2, qty))