【问题标题】:Changing the values in txt file using R r使用 R r 更改 txt 文件中的值
【发布时间】:2017-05-16 10:16:07
【问题描述】:

我想编写一个软代码来更改我的水文模型输入 txt 文件中所需参数的值。有些参数是固定的,有些我会更改为观察值。例如 HYDRUS_Version=4 是固定的,而 WaterFlow=1 和 SoluteTransport=0 等是我想要更改其值的参数。我想分配 waterFlow=5 或 WaterFlow=3.1 和 SoluteTransport=2 或 =2.2 的值

我为水流尝试了这段代码,但我的 txt 文件中的值没有改变。我只是 R 的新手。

    lines <- readLines("G:/Rlearning/HYDRUS1D.txt")

        library(gsubfn)
        i1 <- grepl("Vertical Conductivity", lines)
        lines[i1] <- gsubfn("[0-9.]+", ~format(as.numeric(x)*2, 
                                           scientific = FALSE), lines[i1])

下面是完整的txt文件。

;
[Main]
HYDRUS_Version=4
WaterFlow=1
SoluteTransport=0
Unsatchem=0
Unsatchem=0
HP1=0
HeatTransport=0
EquilibriumAdsorption=1
MobileImmobile=0
RootWaterUptake=1
RootGrowth=0
MaterialNumbers=1
SubregionNumbers=1
SpaceUnit=cm
TimeUnit=days
PrintTimes=160
NumberOfSolutes=0
InitialCondition=1
;
[Profile]
NumberOfNodes=101
ProfileDepth=1.2E+02
ObservationNodes=5
GridVisible=1
SnapToGrid=1
ProfileWidth=80
LeftMargin=40
GridOrgX=0
GridOrgY=0
GridDX=5.E+00
GridDY=5.E+00

【问题讨论】:

  • 我试图将完整的文件作为正常的写作,但它以代码格式接受。

标签: r optimization export requirements.txt


【解决方案1】:

创建一个自定义函数来搜索匹配的字符串并替换值:

replaceFn <- function(phrase, value, file){
  line <- file[grep(phrase, file)]
  value.pos <- as.numeric(gregexpr("=", line))
  file[grep(phrase, file)] <- paste0(substring(line, 1, value.pos), value)
  return(file)
}


dat <- replaceFn("WaterFlow", 3.1, dat)
dat <- replaceFn("SoluteTransport", 2.2, dat)

[1] ";"                       "[Main]"                  "HYDRUS_Version=4"        "WaterFlow=3.1"           "SoluteTransport=2.2"     "Unsatchem=0"            
[7] "Unsatchem=0"             "HP1=0"                   "HeatTransport=0"         "EquilibriumAdsorption=1" "MobileImmobile=0"        "RootWaterUptake=1"      
[13] "RootGrowth=0"            "MaterialNumbers=1"       "SubregionNumbers=1"      "SpaceUnit=cm"            "TimeUnit=days"           "PrintTimes=160"         
[19] "NumberOfSolutes=0"       "InitialCondition=1"      ";"                       "[Profile]"               "NumberOfNodes=101"       "ProfileDepth=1.2E+02"   
[25] "ObservationNodes=5"      "GridVisible=1"           "SnapToGrid=1"            "ProfileWidth=80"         "LeftMargin=40"           "GridOrgX=0"             
[31] "GridOrgY=0"              "GridDX=5.E+00"           "GridDY=5.E+00"   

输入数据:

dat <- c(";", "[Main]", "HYDRUS_Version=4", "WaterFlow=1", "SoluteTransport=0", 
"Unsatchem=0", "Unsatchem=0", "HP1=0", "HeatTransport=0", "EquilibriumAdsorption=1", 
"MobileImmobile=0", "RootWaterUptake=1", "RootGrowth=0", "MaterialNumbers=1", 
"SubregionNumbers=1", "SpaceUnit=cm", "TimeUnit=days", "PrintTimes=160", 
"NumberOfSolutes=0", "InitialCondition=1", ";", "[Profile]", 
"NumberOfNodes=101", "ProfileDepth=1.2E+02", "ObservationNodes=5", 
"GridVisible=1", "SnapToGrid=1", "ProfileWidth=80", "LeftMargin=40", 
"GridOrgX=0", "GridOrgY=0", "GridDX=5.E+00", "GridDY=5.E+00")

【讨论】:

  • 这是根据我的问题。教授现在分配了一种新的方法。我会提出另一个问题。谢谢你写这个。这很好。但现在的问题是我们不会像您那样手动更改代码中的值。我们有一个文本文件,其中有参数值。它将从此 txt 文件中读取值并在此处分配。你能做到吗?我也用替换功能做到了这一点。代码在我的实验室计算机上。我明天上传。但他说我们在文本文件中有水流值和所有其他参数,然后它将读取它。另外,在 R 中创建该文本文件。
  • 也许我的英语不好。 dat
  • 这是我的代码,你和我的代码需要手动输入。我们需要一个软代码来从另一个文本文件中读取这些变量的值。该文本文件有不同的行,我们只需给他命令,它将读取特定行并从该行分配值。 tx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多