1

大家好,我写了一个函数,它基本上将一个大的 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 继续并忽略错误,但脚本无论如何都会停止。

4

0 回答 0