R代码:循环中的动态变量

时间:2014-02-03 14:24:08

标签: r bash

我在R面临挑战。我正在编写一个代码,其中包含另一个用C++编写的代码MHX

通过输入一些浓度等,MHX用于化学数据分析。RMHX之间的整合工作正常。所以我能够以MHX CODE HERE )的形式编写我的cat代码定义,然后调用bash命令来运行MHX来自终端。

现在MHX的结果作为制表符分隔数据表给出,我能够在R中无问题地阅读。问题是我使用R来模拟使用循环的大量MHX计算。

因此需要写dynamic variables而且我被困住了。让我通过我的R代码示例提供更多信息:

for (i in 1:100) {

fin  <-  file.create("input/ex1")  #MHX input file
fout <- file.create("output/ex1.out") #MHX output file

FNM <-  paste0("table_data/pH", i, ".txt")  #filename used inside MHX definition
file.create(FNM)   #this is used to create FNM table in R
fXY <-  file.create(paste0("table_data/ECOMXY", i, ".txt"))  

ifelse (HERE SOME MATHEMATICAL DEFINITIONS OF SOME VARIABLES)

ksource(MHXCode)  #THIS CALLS MY MHX CODE which is inside another R code called `MHXCode` using a custom function KSOURCE. No problem here.

到目前为止,我没有遇到什么重大问题。现在我需要设置dynamic variables: 首先,我要创建变量PHL1PHL100

assign(paste("PHL", i, sep=""), read.table(paste0("table_data/pH", i, ".txt") ,skip=0, sep="\t", head=TRUE, na.strings = "-Inf"))

每个PHL表包含两行和大约20列。现在,我有兴趣从每列的第二行创建数据frames。例如,第1行称为EMF,理想情况下,我需要对从PHLPHL100的所有表执行以下操作,这非常繁琐:

EMFT <- cbind(PHL1$EMF[2], PHL2$EMF[2], PHL3$EMF[2], PHL4$EMF[2], PHL5$EMF[2], PHL6$EMF[2],PHL7$EMF[2], PHL8$EMF[2], PHL9$EMF[2], PHL10$EMF[2], ....... etc up to PHL100! )

我尝试了许多方法来实现上述目标,但我没有成功,包括:

XX <- assign(paste0("PHL", i, "$EMF[2]"), cat(paste0("PHL", i, "$EMF[2]")))

我需要对其他变量做同样的事情才能创建一些复杂的图。我希望任何人都能提供帮助。

我必须提一下,分配的主要问题是我得到了变量的qouted名称,因此无法返回它们的值。同样对于cat,您不能使用它来返回值,您将在上面的示例中获得NULL。简单,我被卡住了!!

请帮忙。

1 个答案:

答案 0 :(得分:0)

感谢贾斯汀,他给了我一个线索来回答我的问题。这就是我所做的:

files <- list.files(path="table_data", pattern=".dat", full.names=T); files
FRM <- NULL
for (f in files){
dat <- read.table(f, skip=0, header=TRUE, sep="\t", na.strings="",quote="", colClasses="character")[2,]  

请注意,[2,]参数意味着您跳过除第2行之外的所有行,同时保留标题,这正是我要查找的内容。

现在我可以将它们全部绑定在一个表格中。

FRM <- rbind(FRM, dat)

这是一个简短的答案,我认为它很整洁,排序!

相关问题