Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用write.xlsx处理空数据帧_R_Loops_R Xlsx - Fatal编程技术网

使用write.xlsx处理空数据帧

使用write.xlsx处理空数据帧,r,loops,r-xlsx,R,Loops,R Xlsx,在循环中使用write.xlsx时,如何处理空数据帧 下面是循环的样子,其中source(“./Scripts/Analysis\u details.R”)引用了创建数据帧的R文件 library(xlsx) for (A in unique(df_base$A)) { df<- df_base[df_base$A==A,] source("./Scripts/Analysis_details.R") output_fi

在循环中使用write.xlsx时,如何处理空数据帧

下面是循环的样子,其中source(“./Scripts/Analysis\u details.R”)引用了创建数据帧的R文件

library(xlsx) 
    for (A in unique(df_base$A)) {
          df<- df_base[df_base$A==A,]
          source("./Scripts/Analysis_details.R")
          output_file = paste("./Output/report_", A, '_', Sys.Date(), ".xlsx", sep='')
          write.xlsx(df1, file=output_file, sheetName="df1", append=TRUE, row.names=FALSE, showNA = FALSE)
          write.xlsx(df2, file=output_file, sheetName="df2", append=TRUE, row.names=FALSE, showNA = FALSE)
          write.xlsx(df3, file=output_file, sheetName="df3", append=TRUE, row.names=FALSE, showNA = FALSE)
          write.xlsx(df4, file=output_file, sheetName="df4", append=TRUE, row.names=FALSE, showNA = FALSE)}

我可以通过在脚本中添加一个修改的
write.xlsx()
函数来解决这个问题。如果数据框中没有行,则跳过
.write_block()
,并仅使用列名保存文件。请注意,您还必须将原始的
.write_block()
函数复制到脚本中

write.xlsx.custom <- function(x, file, sheetName="Sheet1",
                       col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE)
{
    if (!is.data.frame(x))
        x <- data.frame(x)    # just because the error message is too ugly

    iOffset <- jOffset <- 0
    if (col.names)
        iOffset <- 1
    if (row.names)
        jOffset <- 1

    if (append && file.exists(file)){
        wb <- loadWorkbook(file)
    } else {
        ext <- gsub(".*\\.(.*)$", "\\1", basename(file))
        wb  <- createWorkbook(type=ext)
    }  
    sheet <- createSheet(wb, sheetName)

    noRows <- nrow(x) + iOffset
    noCols <- ncol(x) + jOffset
    if (col.names){
        rows  <- createRow(sheet, 1)                  # create top row
        cells <- createCell(rows, colIndex=1:noCols)  # create cells
        mapply(setCellValue, cells[1,(1+jOffset):noCols], colnames(x))
    }
    if (row.names)             # add rownames to data x                   
        x <- cbind(rownames=rownames(x), x)

    if(nrow(x) > 0) {
        colIndex <- seq_len(ncol(x))
        rowIndex <- seq_len(nrow(x)) + iOffset

        .write_block(wb, sheet, x, rowIndex, colIndex, showNA)
    }
    saveWorkbook(wb, file)

    invisible()
}

write.xlsx.custom我可以通过在脚本中添加一个修改后的
write.xlsx()
函数来解决这个问题。如果数据框中没有行,则跳过
.write_block()
,并仅使用列名保存文件。请注意,您还必须将原始的
.write_block()
函数复制到脚本中

write.xlsx.custom <- function(x, file, sheetName="Sheet1",
                       col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE)
{
    if (!is.data.frame(x))
        x <- data.frame(x)    # just because the error message is too ugly

    iOffset <- jOffset <- 0
    if (col.names)
        iOffset <- 1
    if (row.names)
        jOffset <- 1

    if (append && file.exists(file)){
        wb <- loadWorkbook(file)
    } else {
        ext <- gsub(".*\\.(.*)$", "\\1", basename(file))
        wb  <- createWorkbook(type=ext)
    }  
    sheet <- createSheet(wb, sheetName)

    noRows <- nrow(x) + iOffset
    noCols <- ncol(x) + jOffset
    if (col.names){
        rows  <- createRow(sheet, 1)                  # create top row
        cells <- createCell(rows, colIndex=1:noCols)  # create cells
        mapply(setCellValue, cells[1,(1+jOffset):noCols], colnames(x))
    }
    if (row.names)             # add rownames to data x                   
        x <- cbind(rownames=rownames(x), x)

    if(nrow(x) > 0) {
        colIndex <- seq_len(ncol(x))
        rowIndex <- seq_len(nrow(x)) + iOffset

        .write_block(wb, sheet, x, rowIndex, colIndex, showNA)
    }
    saveWorkbook(wb, file)

    invisible()
}
write.xlsx.custom