library(tidyverse)
set.seed(041019)
Я определил простую функцию, которая добавляет 2 столбца вместе, как в этом примере:
# data
dat <- data.frame("x" = sample(1:100, 10), "y" = sample(1:100, 10))
# define function
addXY <- function(dat) {
datOut <- dat %>%
mutate(z = x + y)
return(datOut)
}
addXY(dat)
x y z
1 80 30 110
2 28 16 44
3 11 61 72
4 37 24 61
5 29 44 73
6 62 33 95
7 94 50 144
8 59 59 118
9 88 39 127
10 65 78 143
Скажем, я хочу добавить двоичный аргумент в эту функцию и использовать его для условной фильтрации внутрицепочка dplyr.Как бы я правильно сделал это.Я пробовал это, но это не работает:
addXY <- function(dat, aboveFifty = TRUE) {
datOut -> dat %>%
if (!aboveFifty) {filter(x < 50)} else {filter(x <= 100)} %>%
mutate(z = x + y)
return(datOut)
}
addXY(dat, aboveFifty = FALSE)
Сбой с сообщением об ошибке:
Error in if (.) !aboveFifty else { :
argument is not interpretable as logical
In addition: Warning message:
In if (.) !aboveFifty else { :
the condition has length > 1 and only the first element will be used
Похоже, что он пытается отфильтровать аргумент, а не данные, чтоочевидно не то, что я хочу.