0

我在一个文件夹中有很多数据

data=list.files(path="D:/result")

数据

> > [1] "CNVWorkShop (1).txt" "e17 result.txt"       [3] "E17new result.txt"   "E18 NEW RESULT.txt" 
> 
>  [5] "e18result.txt"       "l15 new result.txt"    [7] "l15
> result.txt"      "L22NEW RESULT.txt"    [9] "L51 NEW RESULT.txt" 
> "l51result.txt"       [11] "L54 NEW RESULT.txt"  "L54result.txt"      
> [13] "PennCNV.txt"         "s40 new result.txt"

我想一次读取多个文件并将每个文件存储为每个数据帧

a=paste("watto",1:14,sep="")

我在下面做这件事,但它不起作用

for(i in 1 :length(data)){
  a[i]=read.table(file=paste("D:/result/",data[i],sep=""),header=T,sep="\t") 
}

它显示警告消息而不给我结果

> Warning message:
In a[1] = read.table(file = paste("D:/result/", data[1], sep = ""),  :
  number of items to replace is not a multiple of replacement length

我想要的结果是

> data from watto1 come from CNVWorkShop (1).txt 
> data from watto2 come from e17 result.txt

我该怎么办?

4

1 回答 1

0

尝试:

  a  <- lapply(data, function(x) read.table(file=paste0("D:/result/",x),
    header=TRUE, sep="\t") )

由于 R 的子集规则,您会收到错误消息。当您使用单括号进行分配时a[1] <-,R 期望用相同长度的 1 替换。对于a[c(1,2)] <-R 接受长度为 2 的替换值,依此类推。您的数据框的长度(列数)大于 1,因此被拒绝。

您可以这样做来指定您正在替换列表元素(注意双括号:

for(i in 1 :length(data)){
  a[[i]]=read.table(file=paste("D:/result/",data[i],sep=""),
    header=TRUE,sep="\t") 
}

但是,这不是很像 R 的语法。不依赖递归的迭代任务可以通过lapply函数族来执行。

于 2013-08-15T15:38:58.770 回答