2017-05-15 9 views
0

Ich möchte einen Softcode schreiben, der die Werte der erforderlichen Parameter meiner hydrologischen Modelleingabe-TXT-Datei ändern wird. einige Parameter sind fest und einige ich werde zu den beobachteten Werten wechseln. Für Beispiel HYDRUS_Version = 4 ist fest und WaterFlow = 1 und SoluteTransport = 0 usw. sind die Parameter, die ich ihre Werte ändern möchte. Ich möchte die Werte von waterFlow = 5 oder WaterFlow = 3.1 und SoluteTransport = 2 oder = 2.2 zuweisenÄndern der Werte in der TXT-Datei mit R r

Ich habe diesen Code für Wasserfluss versucht, aber die Werte in meinen TXT-Dateien werden nicht geändert. Ich bin nur ein neuer Lerner von 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]) 

Unten ist die vollständige TXT-Datei.

; 
[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 
+0

Ich habe versucht, wie ein normales Schreiben Sie die komplette Datei nur setzen, aber es im Codeformat akzeptiert. –

Antwort

0

Erstellen Sie eine benutzerdefinierte Funktion Zeichenfolge suchen passende und ersetzen Wert:

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" 

Eingangsdaten:

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") 
+0

Es ist nach meiner Frage. Prof hat nun einen neuen Weg zugewiesen. Ich werde eine andere Frage stellen. Thnx, um das zu schreiben. Es ist gut. Aber jetzt ist das Problem, dass wir die Werte hier im Code nicht manuell ändern werden, wie Sie es getan haben. Wir haben eine Textdatei, in der wir Werte von Parametern haben. Es liest die Werte aus dieser TXT-Datei und weist sie hier zu. Können Sie das tun? Das habe ich auch mit der Replace-Funktion gemacht. Der Code befindet sich auf meinem Laborcomputer. Ich werde morgen hochladen. aber er sagte, wir haben WaterFlow-Wert und alle anderen Parameter in der Textdatei, dann wird es gelesen. Erstellen Sie auch diese Textdatei in R. –

+0

vielleicht ist mein Englisch nicht gut. dat <- replaceFn ("WaterFlow", 3.1, dat) können wir das nicht auf diese Weise machen. es wird den Wert von 3.1 aus einer Textdatei lesen und diese Textdatei wird auch erstellt. thnx für die Hilfe. –

+0

Es ist mein Code, Ihr und mein Code muss manuell eingegeben werden. Wir brauchen einen Soft-Code, der die Werte dieser Variablen aus einer anderen Textdatei liest. Diese Textdateien haben unterschiedliche Zeilen und wir geben ihm einfach den Befehl und er liest die spezifische Zeile und weist die Werte aus diesen Zeilen zu. tx <- gsub (muster = "Unsatchem = 1", ersetzen = "Unsatchem = 1", x = tx) tx <- gsub (muster = "HP1 = 0", ersetzen = "HP1 = 2", x = tx) tx <- gsub (muster = "PrintTimes = 170", ersetzen = "PrintTimes = 3000", x = tx) writeLines (tx1, "G: /Rearning/HYDRUS1D_1.txt") –