首页 文章

如何添加两个lapply函数的输出文件

提问于
浏览
-1

我曾两次使用一个lapply函数来分析所有学生的数据以及全班的1-3所学校的失败学生 . 使用拆分功能,已根据学校名称拆分了两个数据帧 . 现在,我需要在一个文件中看到一所学校(学校)名单中的学生和失败学生 .

这是我的代码:

spt1 <-split(pass, pass$school) 
# ^ result1 is a dataframe, splitting school wise in pass df

abc=lapply(names(spt1), function(x){write.table(spt1[[x]], 
  file = paste("C:/Users/Documents/Output/Pass", x, ".csv"), row.names = FALSE ,sep = "," )}) 
# ^ for loop to seggregate passed list across all schools

spt2 <-split(fail, fail$school) 
# ^ splitting failur list in the dataframe based on schools

def=lapply(names(spt2), function(x){write.table(spt2[[x]],  
  file = paste("C:/Users/Documents/Output/Fail", x, ".csv"), row.names = FALSE , sep = ",",)}) 
# ^ for loop to seggregate failure list across all schools

现在,我想在单个pdf或csv中查看学校的通过和失败学生的数据 . 30个学校的预期输出为30pdf,每个pdf包含通过和失败学生的列表

Note :两个文件夹中的所有文件的列都不同 .

1 回答

  • 1

    有一些样本数据会很好 . 这会让您了解可能的解决方案吗?

    install.packages('gridExtra')
    
    require(gridExtra)
    
    for(i in 1:length(names(spt1))){
        pdf(file = "test.pdf", width=28, height=21, paper='a4')
    
    
       data1 <- spt1[[i]] 
       loops <- ceiling(nrow(data1)/40)    
          for(j in 1:loops){
              from <- max(1,(j-1)*40)
              to   <- min(nrow(data1),j*40)
              grid.table(data1[from:to,], show.rownames = FALSE, gpar.coretext=gpar(fontsize=8) )
              grid.newpage()    
           }
    
    
        grid.newpage()
    
       data2 <- spt2[[i]] 
       loops <- ceiling(nrow(data2)/40)    
          for(j in 1:loops){
              from <- max(1,(j-1)*40)
              to   <- min(nrow(data2),j*40)
              grid.table(data2[from:to,], show.rownames = FALSE, gpar.coretext=gpar(fontsize=8) )
              grid.newpage()    
           }
        dev.off()
    
    }
    

    我的代码使用gridExtra包,并将您的表写入pdf文档 . 你可以根据包帮助添加文字和 Headers ......

    当然也有使用LaTeX的解决方案......也许你想咨询this question .

    EDITS:

    • 添加了另一个循环,以便在一个页面上适合talbe-chunks

    • 编辑 pdf -function以获得a4纸

相关问题