我有一个大表,我正在读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个元素。
答案 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)