1

我写了一个简单的函数:

myfunction <- function(fileName, stringsAsFactors=TRUE,                 
                   check.names=FALSE,               
                   skip =1,...) {
Data <- read.delim(fileName, skip = skip,                     
                 stringsAsFactors=stringsAsFactors,                      
                 check.names = check.names, ...)                   
cb    <- list()                       
Index <- as.numeric(as.factor(Data[,1]))              
cb    <-  cbind(Data, Index)              
return(cb)
}

此函数获取名为 Data 的文件的第一列,根据该第一列创建一个索引,然后将文件 Data 和创建的索引 cbind。

此函数将应用于名为:的文件myfile_00.txt中,myfile_01.txt依此类推。对于一个文件,它看起来像:

myfunction (fileName = "myfile_00.txt")
myfunction (fileName = "myfile_01.txt")
.......        

我有大约 1000 个文件,所以我想,循环可以来自另一篇文章:

mytxt  <- dir(pattern=".txt")      
n      <- length(mytxt)      
mylist <- vector("list", n)   
for(i in 1:n) {
    mylist[[i]] <- read.delim(mytxt[i], header = F, skip = 1)
}

然后:

d <- lapply(mylist, myfunction)

不幸的是它不起作用......使用lapply时发生错误:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
'file' must be a character string or connection

因为我是 R 的新手,所以我可能会犯错误,我无法弄清楚。

4

1 回答 1

4

就像@Arun 指出的那样,您尝试运行您的函数两次:一次在文件上,一次在您创建的数据框上......相反,您的代码应该如下所示:

files <- list.files(pattern = ".txt")
mylist <- lapply(files, myfunction) 
于 2013-02-18T13:15:40.550 回答