当我使用lapply时,为什么我的数据会失去它的维度?

时间:2014-05-09 09:27:24

标签: r

我正在从目录中读取大量文件并对每个文件进行一些计算。 因为我想让我的脚本变成parralel,所以我使用了lapply。当我在列表的每个元素上查看数据框的维数时,它变为1。 有人会帮我修理吗? 这是我的努力:

 files <- list.files(path="path to file") 
 dfr <- lapply(files, function(x) read.table(x,header=T,sep="\n"))


            for(i in drf){
             Do some computation

                if (ncol(i) > 1){

            y <- as.matrix(i[1])
            x <- as.matrix(i[2:ncol(i)])
            }
    .
    .

    }

        # 

            > i
            [[1]]
               ACAA2.hsa.miR.124.AGO2.hsa.miR.124.AGO134
            1        7.6561 18.5924339201 23.4560035028 
            2        7.2355 26.2524888635 33.6513700944 
            3         7.365 23.6841865928 28.2168475593 
            4        8.4768 22.4003094419 28.0983702155 
            5        5.5838 20.4838449736 26.8616064228 
            6        7.3123 20.8488005184 26.9155966811 
            7        7.2345 21.5272944711 26.2954400309 
            8          7.05 23.3113502366 29.3856555269 
> dim(i[1])
NULL
> dim(i[[1]])
[1] 67  1
      > a<-i[[1]]
> dim(a)
[1] 67  1
> a
   ACAA2.hsa.miR.124.AGO2.hsa.miR.124.AGO134
1        7.6561 18.5924339201 23.4560035028 
2        7.2355 26.2524888635 33.6513700944 
3         7.365 23.6841865928 28.2168475593 
4        8.4768 22.4003094419 28.0983702155 
5        5.5838 20.4838449736 26.8616064228 
6        7.3123 20.8488005184 26.915596681

    but I would expect 

        >dim(a)
         67  3

    Because I loses the dimension of data, my *for loop* doesn't work

1 个答案:

答案 0 :(得分:1)

您的问题不是for循环或lapply调用,而是您的read.table命令。您使用sep="\n"代替sep=" "

?read.table向您显示sep参数是字段分隔符。您的字段分隔符似乎是空格" "。只需使用read.table而不指定sep参数应该有效。