将特定R包中的函数应用于文件夹

时间:2015-06-14 12:40:57

标签: r

我有一个大表,我正在读R作为数据帧。在对df进行排序和子集化之后,我使用split()函数将其分解为一个列表。然后我将该列表作为单独的文本文件写出来。我现在正在将各个.txt文件读回R中,这样我就可以确定每个文件中没有缺少Energy值的effectiveSize(来自coda包)。但是,我不认为这是最有效的方法。在任何情况下,有没有办法可以将effectiveSize应用于列表的每个单独的文件或元素?当我在其中一个输出文件 - effectiveSize(ASP29A [,3])上测试effectiveSize函数时,它工作正常。但那只是102个文件/元素中的一个。

原始有序数据框如下所示;

Chain  Res    Energy
 A    ALA28  -1.8046
 A    ALA28  -2.1910
 A    ALA28  -1.8403
 A    ALA28  -2.1813
 A    ALA28  -2.3693
 A    ALA28  -2.2808

我希望这很清楚。

作为列表,数据看起来像

$ C.017500:'data.frame':    6003 obs. of  3 variables:
..$ Chain : Factor w/ 3 levels "A","B","C": 3 3 3 3 3 3 3 3 3 3 ...
..$ Res   : chr [1:6003] "017500" "017500" "017500" "017500" ...
..$ Energy: num [1:6003] -37 -33.8 -34.7 -35.4 -35 ...

$ A.ALA28 :'data.frame':    6003 obs. of  3 variables:
..$ Chain : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
..$ Res   : chr [1:6003] "ALA28" "ALA28" "ALA28" "ALA28" ...
..$ Energy: num [1:6003] -1.8 -2.19 -1.84 -2.37 -2.18 ...

等等通过102个元素。

1 个答案:

答案 0 :(得分:2)

这是我将如何做到的:

  • 使用以下方法阅读文件列表:

    setwd("path/to/files/")
    file.list <- dir(pattern = "txt$")
    

    pattern位是可选的,但它可以帮助您只过滤一些文件。

  • 使用sapply运行您想要的任何功能

    res <- sapply(file.list, yourfunction)
    

例如,要知道可以使用的文件的文件大小:

res <- sapply(file.list, file.size)

您可能想要创建调用effectiveSize的函数,例如:

eff.size <- function(filename)
      {
      data <- read.table(filename)
      # <do something here with the data as needed>
      res <- effectiveSize(<appropriate parameters>)

      # return the result
      res
      } 

然后致电

 res <- sapply(file.list, eff.size)