Выходной цикл Тест Колмогорова Смирнова (ks.test) в dataframe

Я хотел бы включить вывод ks.test, записанный в цикле, во фрейм данных или файл, вместо того, чтобы печатать выводы 1155 тестов в консоли ... :-).

column_equality_stats = function(data, lab_stats1, lab_stats2, min_count=100) {
  for(i in 1:length(lab_stats1)) {
    lab_testcodes_1 = lab_stats1[i]
    lab_testcodes_2 = lab_stats2[i]
    equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
    col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
    col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']
    if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){
      stats <- ks.test(col1, col2)
      print(stats)

    }
  }
}

Я хотел бы иметь data.frame со следующими столбцами: имена col1 и col2 (значения уравнения), p-значение и D-значение.

Утопический фрейм данных

Заранее большое спасибо!!


person loverma2    schedule 27.11.2019    source источник


Ответы (1)


Это все, что я могу. Отредактируйте свой вопрос и добавьте воспроизводимый пример.

Мне нужно знать, как определяются ваши данные. Я не могу запустить ваш код! :-)

В любом случае, просто создайте фрейм данных для каждого запуска цикла и свяжите их вместе.

map_dfr пакета purrr сделает это за вас.

library(purrr)

.column_equality_stats <- function(i, data, lab_stats1, lab_stats2, min_count = 100){

  lab_testcodes_1 <- lab_stats1[i]
  lab_testcodes_2 <- lab_stats2[i]
  equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
  col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
  col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']

  if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){

    stats <- ks.test(col1, col2)
    res <- data.frame(col1 = lab_testcodes_1,
                      col2 = lab_testcodes_2,,
                      pvalue = stats$p.value,
                      dvalue = stats$statistics)

  } else {res <- data.frame()}

  res

}

column_equality_stats <- function(data, lab_stats1, lab_stats2, min_count=100) {

  map_dfr(seq_along(lab_stats1), 
          .column_equality_stats,
          data       = data,
          lab_stats1 = lab_stats1,
          lab_stats2 = lab_stats2,
          min_count  = min_count)

}


person Edo    schedule 27.11.2019