我在R
中面临挑战。我正在编写一个代码,该代码包含了C++
中编写的另一个代码,称为MHX
。
MHX通过输入一些浓度等来用于化学数据分析。R
和MHX
之间的集成效果很好。因此,我能够以cat
的形式(此处)编写我的MHX
代码定义,然后调用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
。以称为 EMF
的行1为例,理想情况下,我需要为从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]")))
我将需要对其他变量进行相同的操作,以便能够创建一些复杂的图。我希望任何人都可以提供帮助。
我必须提到,分配的主要问题是我获得了变量的名称,因此无法返回其值。同样对于CAT,您不能使用它返回值,在上面的示例中将获得NULL
。简单我被卡住了!!
请帮助。
感谢贾斯汀,他给了我一个线索来回答我的问题。这是我所做的:
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,]参数意味着您在保持标题时跳过所有行,这是我要寻找的。
现在我可以将它们全部绑在一个表格中。
FRM <- rbind(FRM, dat)
这是一个简短的答案,我认为它很整洁,排序了!