R: цикл, выполняющий ks-тесты во фрейме данных, хранящемся в матрице

Я извиняюсь за странный синтаксис, я только сейчас учусь программировать. У меня есть df 100 столбцов и 5304 строк. Мне нужно выполнить два двухсторонних ks.tests для 94 из этих последних числовых столбцов (6:ncol(df)), используя 5-й числовой столбец или справочный столбец:

r<-df$rank. 

Я также хотел бы хранить значения в матрице. Из того, что я понимаю, я могу использовать либо функции for, либо apply. У меня есть простой код, который выводит только одну статистику (кажется, что она перезаписывает результаты):

for (i in 6:ncol(df))
y<-df[,i]
ks.test(r,y)->K
> K

Two-sample Kolmogorov-Smirnov test

data:  r and y
D = 0.71983, p-value < 2.2e-16
alternative hypothesis: two-sided

Я пробовал много вариантов этого, а также неправильно использовать. Любое понимание того, почему "K" не должен возвращать несколько значений или присваивать вывод матрице? Спасибо.

редактировать: пример набора данных

probe set   symbol  zscore  rank X1   X4 X13 X15 ....N (N=100)
22133-x_at  SP110   4.73635   1  400  14  5  1000
.                             2  5    430 56 150
.                             3  24   78  23 9000
...N
(N=5304)

1 ответ

Решение

Рассматривать sapply вернуть матрицу ks.test статистика и п.значение:

# RANDOM DATA TO DEMONSTRATE
set.seed(147)
df <- data.frame(id1 = sample(LETTERS, 5304, replace=TRUE),
                 id2 = sample(LETTERS, 5304, replace=TRUE),
                 id3 = sample(LETTERS, 5304, replace=TRUE),
                 id4 = sample(LETTERS, 5304, replace=TRUE),
                 setNames(lapply(5:100, function(i) rnorm(5304)),
                          paste0("Col", 5:100)))

r <- df[,5]
res <- sapply(df[,6:100], function(y) {
  ks <- ks.test(r, y)
  c(statistic=ks$statistic, p.value=ks$p.value)
  setNames(c(ks$statistic, ks$p.value), c("statistic", "p.value"))
})

# PRINT FIRST FIVE COLS
res[,1:5]
#                 Col6       Col7       Col8      Col9      Col10
# statistic 0.02111614 0.01338612 0.01074661 0.0224359 0.01677979
# p.value   0.18774138 0.72887906 0.91933648 0.1384762 0.44412866
Другие вопросы по тегам