подход. Различные пользовательские функции могут изменять порядок скорости.
аюсь использовать выражение mutate трубы с помощью пользовательской функции. Я выглядела это несколько похожеТАК сообщение но тщетно. Скажем, у меня есть кадр данных, как это (гдеblob
является некоторой переменной, не связанной с конкретной задачей, но является частью всей информации):
df <-
data.frame(exclude=c('B','B','D'),
B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0),
blob=c('fd', 'fs', 'sa'),
stringsAsFactors = F)
У меня есть функция, которая использует имена переменных, поэтому выберите некоторые на основе значения вexclude
столбец и, например, вычисляет сумму по переменным, не указанным вexclude
(который всегда является одним символом).
FUN <- function(df){
sum(df[c('B', 'C', 'D')] [!names(df[c('B', 'C', 'D')]) %in% df['exclude']] )
}
Когда я даю одну строку (строка 1)FUN
Я получаю ожидаемую суммуC
а такжеD
(те, которые не упомянутыexclude
), а именно 4:
FUN(df[1,])
Как мне сделать аналогично в трубе с мутацией (добавление результата в переменнуюs
). Эти две попытки не работают:
df %>% mutate(s=FUN(.))
df %>% group_by(1:n()) %>% mutate(s=FUN(.))
ОБНОВИТЬ Это также не работает как задумано:
df %>% rowwise(.) %>% mutate(s=FUN(.))
Это дело причины, но не в мутате dplyr (и pipe):
df$s <- sapply(1:nrow(df), function(x) FUN(df[x,]))