Вставьте выходы двух функций друг в друга в oop в R - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь вставить вывод cat сразу после вывода CrossTable. Таким образом, на каждой итерации , сначала выводится CrossTable и сразу после него генерируется cat.

Однако я не могу добиться этого с моим текущим кодом, Есть ли способ добиться этого в R?

library(gmodels)
library(vcd)

z <- data.frame(A = rep(c('Yes','No'), 5), B = sample(c('Yes','No'), 10, replace = T), group = rep(c('Treat', 'Cont'), each = 5))

lapply(names(z)[-3], function(x){ CrossTable(z[[x]], z$group, expected = F, format="SPSS", chisq= T, prop.t = F, dnn = c(x, "Group"));
 cat(paste('cramer =', round(assocstats(table(z[[x]], z$group))[[5]], 3))) #%@ paste to `CrossTable` output
})

1 Ответ

1 голос
/ 29 апреля 2020

Мы можем сделать это с помощью for l oop после захвата вывода из CrossTable и использования append = TRUE в capture.output и cat, записав содержимое в один файл

for(i in 1:2) {
      capture.output(CrossTable(z[[i]], z$group, expected = FALSE,
          format="SPSS", chisq= T, prop.t = F, dnn = c(names(z)[i], "Group")), 
              file = "tempnew.txt", append = TRUE)
     cat(paste('cramer = ', round(assocstats(table(z[[i]], z$group))[[5]], 3)),
           file =  'tempnew.txt', append = TRUE, '\n')
     cat('\n\n\n********************************\n\n\n', 
                  file = 'tempnew.txt', append = TRUE, '\n')
    }

- содержимое «tempnew.txt»

enter image description here

...