У меня проблема с mutate и самописной функцией. Мои данные в основном таковы:
license_sets <- list(x = c("A", "B"), y = c("C", "D", "E"))
license_data <- data.frame(license = c("A","B","C","D","E"), bidder = c("x","x","y","y","y"))
source_data <- expand.grid(license_i = c("A","B","C","D","E"), license_j = c("A","B","C","D","E"))
source_data$value <- c(1:25)
Функция, которую я хочу применить, выглядит следующим образом:
compute_set <- function(i, J){ tmp <- source_data %>%
filter(license_i == i, license_j %in% J)
return(sum(tmp$value))
}
Теперь я хочу применить функцию с помощью mutate:
license_data %>% mutate(z = compute_set(license, license_sets[[bidder]]))
Я получаю следующие сообщения об ошибках и предупреждения:
Error in mutate_impl(.data, dots) :
Evaluation error: Evaluation error: recursive indexing failed at level 2
..
In addition: Warning messages:
1: In is.na(e1) | is.na(e2) :
longer object length is not a multiple of shorter object length
2: In `==.default`(license_i, i) :
longer object length is not a multiple of shorter object length
Если я запускаю ту же функцию с простым циклом for, она работает совершенно нормально. Кто-нибудь знает, в чем проблема (ы) здесь? Это должно быть связано с мутацией, верно? Я также уже попробовал as.character (покупатель) и другие вещи, которые я нашел здесь, но пока ничего не получалось.
Я должен добавить, что фреймы данных, с которыми я имею дело, намного больше, чем те, которые я здесь показываю, поэтому цикл for невозможен ... (следовательно, я также благодарен за подсказки по упрощению для функции;))