Функция R, чтобы гарантировать, что существующие строки матрицы не перезаписываются с использованием rbind? - PullRequest
0 голосов
/ 17 апреля 2019

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

Я нашел код, исключающий вторую инструкцию 'for', содержащую ссылку 'i', для правильной работы - поэтому статистика верна, но когда я добавляю код в (включая оператор for, ссылающийся на 'i' итакже перечисляя 'i' под вектором, указанным в 'rbind', все ранее правильные статистические данные перезаписываются набором статистических результатов одного теста.

dta <- c()
max_col_A1.1_OR_df_transp <- ncol(A1.1_OR_df_transp)

  for(j in 2:ncol(numeric_A1.1_OR_df_transp)){ 
  for(i in colnames(A1.1_OR_df_transp[2:max_col_A1.1_OR_df_transp])){
  wilcoxon_input <- as.matrix(c(A1.1_OR_df_transp[1:23,j], A1.1_OR_df_transp[24:76,j]))
  wilcoxon_result <- wilcox.test(wilcoxon_input[1:23], wilcoxon_input[24:76], alternative = "two.sided", paired = FALSE, exact = TRUE)
    dta <- rbind(dta,c(i,(unlist( wilcoxon_result))))
  }
}

Ожидаемые результаты должны выглядеть следующим образом (A):

head(dta)

[1,] "AAA_8.44_753.9742mz"  "1214"      "2.2272910427744e-18"  "0"                       
"two.sided" "Wilcoxon rank sum test"                            
"wilcoxon_input[1:23] and wilcoxon_input[24:76]"
[2,] "AAA_9.03_190.0498mz"  "1059"      "2.02343356121504e-08" "0"                       
"two.sided" "Wilcoxon rank sum test with continuity correction" 
"wilcoxon_input[1:23] and wilcoxon_input[24:76]"

Фактические результаты (B): (обратите внимание, как правильно имя переменной (крайний левый угол), но другие результаты теста копируются)

head(dta)

[1,] "AAA_8.44_753.9742mz"  "1214"      "2.2272910427744e-18" "0"                       
"two.sided" "Wilcoxon rank sum test" "wilcoxon_input[1:23] and 
wilcoxon_input[24:76]"
[2,] "AAA_9.03_190.0498mz"  "1214"      "2.2272910427744e-18" "0"                       
"two.sided" "Wilcoxon rank sum test" "wilcoxon_input[1:23] and

1 Ответ

0 голосов
/ 19 апреля 2019

Теперь я смог использовать только одну ссылку - то есть i, поэтому теперь прекрасно работает следующее:

dta <- c()

max_col_A1.1_OR_df_transp <- ncol(A1.1_OR_df_transp)

for(i in colnames(A1.1_OR_df_transp[2:max_col_A1.1_OR_df_transp])){
  wilcoxon_input_CTRL <- A1.1_OR_df_transp_CTRL[1:23,i]
  wilcoxon_input_PATIENT_GROUP <- A1.1_OR_df_transp_PATIENT_GROUP[24:76,i]
  wilcoxon_result <- wilcox.test(wilcoxon_input_CTRL, wilcoxon_input_PATIENT_GROUP, alternative = "two.sided", paired = FALSE, exact = TRUE) 
  dta <- data.frame(unlist(wilcoxon_result),stringsAsFactors=FALSE)
  dta1 <- t(dta)
  dta1 <- cbind(i,dta1)
  output_frame <- rbind(output_frame, dta1)
}
...