Рассмотрим базовые R by
для подстановки фрейма данных одним или несколькими факторами, такими как Обработка и Блок . А поскольку by
вернет список фреймов данных (вывод функции), запустите do.call
, чтобы связать строки всех элементов df с одним конечным фреймом данных.
Кроме того, поскольку by
работает по нескольким факторам для разделения на все возможные комбинации, оберните tryCatch
для таких особых подмножеств нулевых строк, которые могут вызвать ошибку вызова audpc
.
# BUILD FUNCTION TO RECEIVE SUBSET DF
AUDPC.rel <- function(sub) {
tryCatch(data.frame(Treatment = sub$Treatment[[1]],
Block = sub$Block[[1]],
Evaluation = audpc(sub$Foci, sub$Time, type = "absolute")),
error = function(e)
data.frame(Treatment = sub$Treatment[[1]],
Block = sub$Block[[1]],
Evaluation = NA)
)
}
# CALL BY(), PASSING SUBSETS TO DEFINED FUNCTION
df_list <- by(data, data[c("Treatment", "Block")], AUDPC.rel)
# BUILD SINGLE FINAL DF
final_df <- do.call(rbind, df_list)