Рассмотрите возможность разделения вашего фрейма данных на все X0 и X1 переменных и затем запустите mapply
(или его оболочку, Map
). Это позволяет вам хранить похожие объекты в контейнерах (списки, матрицы, кадры данных и т. Д.), А не отдельные переменные, которые заполняют вашу глобальную среду и требуют утомительного индивидуального назначения.
Кроме того, как вы видите, некоторые переменные некорректно проходят через wilcox.test
, для этого рассмотрим обращение к обертке в tryCatch
для вывода NA
для этих неудачных экземпляров:
# SUBSET ONLY X0 VARIABLES
mydata_X0 <- mydata[grep("X0", names(mydata))]
# ORDER COLUMNS
mydata_X0 <- mydata_X0[order(names(mydata_X0))]
# SUBSET ONLY X0 VARIABLES
mydata_X1 <- mydata[grep("X1", names(mydata))]
# ORDER COLUMNS
mydata_X1 <- mydata_X1[order(names(mydata_X1))]
# TRY/CATCH WRAPPER TO wilcox.test
wilcox_test_proc <- function(x, y) {
tryCatch(wilcox.test(x, y),
error = function(e) NA)
}
# SIMPLIFIED VERSION
wilcox_test_matrix <- mapply(wilcox_test_proc, mydata_X0, mydata_X1)
# LIST VERSION
wilcox_test_list <- Map(wilcox_test_proc, mydata_X0, mydata_X1)
Данные
set.seed(962018)
mydata <- setNames(data.frame(replicate(18, runif(50))),
c("X0ipss", "X0quo", "X0oiief", "X0psa", "X0qmax",
"X0pvr", "X0pv", "X0ct_perfusion_flow", "X0pvct",
"X1ipss", "X1quo", "X1oiief", "X1psa", "X1qmax",
"X1pvr", "X1pv", "X1ct_perfusion_flow", "X1pvct"))
выход
wilcox_test_matrix
# X0ct_perfusion_flow
# statistic 1198
# parameter NULL
# p.value 0.7225658
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# X0ipss
# statistic 1339
# parameter NULL
# p.value 0.5417935
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# X0oiief
# statistic 1206
# parameter NULL
# p.value 0.7642678
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# ...