2017-05-15 2 views
0

내 수문 모델 입력 txt 파일의 필수 매개 변수 값을 변경하는 소프트 코드를 작성하고 싶습니다. 일부 매개 변수는 고정되어 있고 일부는 관측 값으로 변경됩니다. 예를 들어, HYDRUS_Version = 4가 고정되어 있고 WaterFlow = 1 및 SoluteTransport = 0 등은 값을 변경하려는 매개 변수입니다. waterFlow = 5 또는 WaterFlow = 3.1 및 SoluteTransport = 2 또는 2.2 값을 할당하려고합니다.R을 사용하여 txt 파일의 값 변경

물 흐름에이 코드를 사용했지만 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 
+0

난 그냥 보통의 쓰기로 전체 파일을 넣을려고하지만 그것을 코드 형식으로 허용됩니다. –

답변

0

문자열을 일치 검색 값을 대체하는 사용자 정의 함수를 만듭니다 :

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

내 질문에 따르면. 교수는 이제 새로운 방식을 부여 받았다. 나는 또 다른 질문을 할 것이다. 이것을 쓰는 것에 대한 Thnx. 좋습니다. 하지만 이제는 코드에서 수동으로 변경하지 않을 것입니다. 우리는 매개 변수의 값을 가지고있는 텍스트 파일을 가지고 있습니다. 이 txt 파일의 값을 읽고 여기에 할당합니다. 그럴 수있어? 나는 또한 replace 함수로 그렇게했다. 코드가 내 랩 컴퓨터에 있습니다. 나는 내일 업로드 할 것이다. 하지만 그는 우리가 WaterFlow 값과 텍스트 파일에있는 다른 모든 매개 변수를 가지고 있다고 읽었을 것입니다. 또한 그 텍스트 파일을 R. –

+0

에 작성하십시오. 제 영어 실력이 좋지 않을 수도 있습니다. dat <- replaceFn ("WaterFlow", 3.1, dat) 이렇게하면 안됩니다. 텍스트 파일과이 텍스트 파일에서 값 3.1을 읽습니다. 도움을 thnx. –

+0

내 코드, 내 코드가 수동 입력이 필요합니다. 우리는 다른 텍스트 파일에서이 변수의 값을 읽을 수있는 부드러운 코드가 필요합니다. 이 텍스트 파일은 다른 행을 가지며 명령을 내리면 특정 행을 읽고 해당 행의 값을 할당합니다. tx <- gsub (pattern = "Unsatchem = 1", replace = "Unsatchem = 1", x = tx) tx <- gsub (패턴 = "HP1 = 0", replace = "HP1 = 2", x = tx) tx <- gsub (pattern = "PrintTimes = 170", replace = "PrintTimes = 3000", x = tx) writeLines (tx1, "G : /Rlearning/HYDRUS1D_1.txt") –

관련 문제