大家好,我写了一个函数,它基本上将一个大的 data.frame 分成两部分,然后对每个 sub-data.frame 进行一些计算。在这样的计算之后,它将每个 sub-data.frame 的计算结果逐行求和(字符串:z = x+y)。部分功能:
Myfun <- function(fileName, check.names=FALSE, header = FALSE, stringsAsFactor = FALSE, sep = "\t",...){ Data <- read.delim(fileName, header = header, check.names = check.names, stringsAsFactor = stringsAsFactor, sep = sep, ...) newdata_a <- Data[which(Data[,1]==1), ] newdata_b <- Data[ which(Data[,1]==-1), ] ............... ............... z = x+y return(tryCatch((z), error=function(e) NULL)) }
我使用以下代码将此函数应用于一组 data.frames:
source("Myfun.R") files <- list.files(pattern = ".txt") files = mixedsort(sort(files)) for (i in 1: length(files)){ b <- lapply(files, Myfun)}
问题在于,对于某些 data.frame,x 和 y 由于 data.frame 的性质而具有不同的长度,这就是出现以下错误消息的原因:
Error in Ops.data.frame(x, y) : + only defined for equally-sized data frames Calls: lapply -> FUN -> Ops.data.frame Execution halted
为了克服这个问题,我将字符串: return(tryCatch((z), error=function(e) NULL)) 引入 Myfun 以允许 R 继续并忽略错误,但脚本无论如何都会停止。