首页 > 解决方案 > 在R中的循环中将两个函数的输出相互粘贴

问题描述

我正在尝试将输出粘贴到输出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
})

标签: rfunctionlapply

解决方案


我们可以通过将内容写入同一个文件来for捕获输出CrossTableappend = 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”的内容

在此处输入图像描述


推荐阅读