2016-11-28 16 views
1

リストの各要素に新しい列を追加する際に、これらのファイルの変更された名前を含む問題があります。これまでのところ、私はsubstrのファイル名列を作成することができましたが、その一方で、この列に新しい文字列を追加することはできませんでした。ファイルリストのファイル名を変更して新しい列として追加する

ここに私の再現性の試みがある、唯一の作業ディレクトリに.txtファイルを生成するための

この部分!

writeFiles <- function(n, maxRows=10){ 
    lapply(seq(10,90,10),function(x) write.table(sample(sample(maxRows)[1],replace=F),paste(x,'.txt',sep=""), quote=FALSE, col.names = FALSE,row.names=FALSE)) 
}  
writeFiles(9,10) 

filesToProcess <- dir(pattern = "*\\.txt") 

"10.txt" "20.txt" "30.txt" "40.txt" "50.txt" "60.txt" "70.txt" "80.txt" "90.txt" 

次のステップでは、私はこのファイルを読み込み、ファイル名にのみ.txtファイルの最初の文字を取る列を変更します。

data.list <- lapply(filesToProcess,function(x){ 
    tmp <- read.table(file=x, header = F,fill=T, comment.char='*') 
# tmp$filenames <- paste0(substr(x,1,1),c("best","worst"),sep="") 
    tmp$filenames <- substr(x,1,1) 

    return(tmp) 
}) 

    data.list 
     [[1]] 
      V1 filenames 
     1 4   1 
     2 3   1 
     3 7   1 
     4 8   1 
     5 1   1 
     6 2   1 
     7 6   1 
     8 5   1 

     [[2]] 
      V1 filenames 
     1 4   2 
     2 1   2 
     3 5   2 
     4 3   2 
     5 2   2 
     6 6   2 
     7 7   2 

     [[3]] 
      V1 filenames 
     1 1   3 
     2 3   3 
     3 2   3 

など

実際、私もfilenames列に新たな文字列にしたいと私はlapplyの内側に貼り付けコマンドを試してみました、

data.list <- lapply(filesToProcess,function(x){ 
    tmp <- read.table(file=x, header = F,fill=T, comment.char='*') 
    tmp$filenames <- paste0(rep(c("best","worst"),c(4,5)),substr(x,1,1),sep="") 
    return(tmp) 
}) 

エラー$<-.data.frame*tmp*、 "ファイル名" で、値= c( "best1"、# "best1":置換は9行、データは8

したがって最初の4つの.tx tファイルは最善とマークされ、残りの5ファイルは最悪の.txtファイルです。

lapplyの内部ではどうすればいいですか?

答えて

2

'data.list'の最初の4つの要素をサブセット化し、それらをループし、transform 'filenames'列をサブセット化できます。同様に、同じ我々はまた、 '最良' のvectorを作成することによって、 'filesToProcess' から「最悪の事態をこれを行うことができ、残りの5つのlist要素

data.list[5:9] <- lapply(data.list[5:9], transform, filenames= paste0("worst", filenames)) 

で行うことができます

data.list[1:4] <- lapply(data.list[1:4], transform, filenames= paste0("best", filenames)) 

'ファイルシーケンスのシーケンスをループします。

v1 <- rep(c("best", "worst"), c(4, 5)) 
lapply(seq_along(filesToProcess),function(i){ 
    tmp <- read.table(file=filesToProcess[i], header = FALSE, fill=TRUE, comment.char='*') 
    tmp$filenames <- paste0(v1[i], substr(filesToProcess[i],1,1), sep="") 
    tmp 
    }) 
+0

ありがとうございます。私たちはループ外に出ることなくこれを行うことができますか?私が提案するように。 – Alexander

+1

@Alexanderコードを修正しました。動作していることを確認してください。 – akrun

+1

こんにちは。ありがとう。常に完璧な作品:) – Alexander

関連する問題