Как создать функцию, которая вычисляет несколько статистических функций?

#r #function #coding-efficiency

#r #функция #кодирование-эффективность

Вопрос:

Я хочу провести статистический анализ многих векторов, таких как cor , MAE , bias , sd , t.test , chisq.test ,… и я думаю, что есть какой-либо способ создания функции, которую я только передаю данные для анализа, и она выдает вектор с вычислениями.

В идеале я хотел бы передать vector1 и vector2 и выполнить вычисления.

Пример того, как я хотел бы, чтобы это выглядело

Прямо сейчас я делаю следующее, но это становится неустойчивым довольно быстро.

 ## R^2 rsq_15_18 lt;- round(cor(x = study_15_18$potential_15, y = study_15_18$overall_18 ,method = "pearson")^2,4) rsq_16_19 lt;- round(cor(x = study_16_19$potential_16, y = study_16_19$overall_19 ,method = "pearson")^2,4) rsq_17_20 lt;- round(cor(x = study_17_20$potential_17, y = study_17_20$overall_20 ,method = "pearson")^2,4) rsq_18_21 lt;- round(cor(x = study_18_21$potential_18, y = study_18_21$overall_21 ,method = "pearson")^2,4) rsq_19_22 lt;- round(cor(x = study_19_22$potential_19, y = study_19_22$overall_22 ,method = "pearson")^2,4)  ## MAE mae_15_18 lt;- round(mae(study_15_18$overall_18, study_15_18$potential_15),4) mae_16_19 lt;- round(mae(study_16_19$overall_19, study_16_19$potential_16),4) mae_17_20 lt;- round(mae(study_17_20$overall_20, study_17_20$potential_17),4) mae_18_21 lt;- round(mae(study_18_21$overall_21, study_18_21$potential_18),4) mae_19_22 lt;- round(mae(study_19_22$overall_22, study_19_22$potential_19),4)  ## Bias bias_15_18 lt;- round(bias(study_15_18$overall_18, study_15_18$potential_15),4) bias_16_19 lt;- round(bias(study_16_19$overall_19, study_16_19$potential_16),4) bias_17_20 lt;- round(bias(study_17_20$overall_20, study_17_20$potential_17),4) bias_18_21 lt;- round(bias(study_18_21$overall_21, study_18_21$potential_18),4) bias_19_22 lt;- round(bias(study_19_22$overall_22, study_19_22$potential_19),4)  comparison lt;- c("15_18", "16_19", "17_20", "18_21", "19_22") R2 lt;- c(rsq_15_18, rsq_16_19, rsq_17_20, rsq_18_21, rsq_19_22) MAE lt;- c(mae_15_18, mae_16_19, mae_17_20, mae_18_21, mae_19_22) bias lt;- c(bias_15_18, bias_16_19, bias_17_20, bias_18_21, bias_19_22)   data.frame(comparison, R2, MAE, bias)  

Спасибо,

Комментарии:

1. Для начала изучите purrr::map2() . Затем внесите свои исследования в списки. (Каждый раз, когда у вас много похожих имен, вам следует подумать о структуре списка.)

Ответ №1:

Итак, у вас есть два списка исследований, которые вы сравниваете. Внесите их в списки:

 study_overall lt;- list(study_15_18$overall_18, ...) # fill in ... as needed study_potential lt;- list(study_15_18$potential_15, ...)  

Теперь вы можете обрабатывать эти списки параллельно:

 library(purrr) cors lt;- map2_dbl(study_overall, study_potential,   (x, y) round(cor(x, y, method = "pearson"))  )  

Теперь вы можете поместить полученные векторы в свой фрейм данных.

Комментарии:

1. Вы могли бы сделать еще лучше, вернув несколько статистических данных из анонимной функции и используя map2_dfr их для объединения.