подход. Различные пользовательские функции могут изменять порядок скорости.

аюсь использовать выражение 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,]))

Ответы на вопрос(1)

Ваш ответ на вопрос