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と作成されたインデックスを結合します。

この関数はmyfile_00.txt、:などの名前のファイルに適用されますmyfile_01.txt。1つのファイルの場合、次のようになります。

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 が指摘したように、関数を 2 回実行しようとしています。ファイルに対して 1 回、作成したデータ フレームに対して 1 回です。代わりに、コードは次のようになります。

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