我在R
面临挑战。我正在编写一个代码,其中包含另一个用C++
编写的代码MHX
。
通过输入一些浓度等,MHX用于化学数据分析。R
和MHX
之间的整合工作正常。所以我能够以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
:
首先,我要创建变量PHL1
到PHL100
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
,理想情况下,我需要对从PHL
到PHL100
的所有表执行以下操作,这非常繁琐:
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
。简单,我被卡住了!!
请帮忙。
答案 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,]
现在我可以将它们全部绑定在一个表格中。
FRM <- rbind(FRM, dat)
这是一个简短的答案,我认为它很整洁,排序!