#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
их для объединения.