2013-06-21 9 views
1

기존 텍스트 파일 (아래 발췌 참조)의 변수를 my R 스크립트로 "바꾸"려고합니다. 변수는 var1에서 var6까지이며, 아래 값은 다시 채워 져야합니다. 텍스트 파일 내의 변수 위치는 항상 동일합니다.텍스트 파일의 특정 위치에 변수 덮어 쓰기 R

*** BLOCK B: WATER FLOW INFORMATION ************************************ 
hTab1 hTabN 
1e-006 10000 
    M   H 
    0   0 
var1  var2  var3  var4  var5  var6 
0.095  0.41  0.03  1.5  0.26  0.5 

누군가가 아이디어를 얻었습니까? 친절하게 반갑습니다

+0

내 appologies입니다 : 나는에 저장되어 게시 무엇 .txt 파일. (다른 것들 사이에) .txt 파일을 열어 var1-var6 아래의 값 중 일부를 바꿔 넣으려고합니다. 더 명확한 내용이 있습니까? – Toby

답변

1

나는이 해결책을 얻습니다. 어쩌면 다른 사람이 더 쉽게 들어올 수도 있습니다. 벡터의 새 목록을 만들 XX

  • :

    1. strsplit를 사용하여 AA 벡터의 라인 contaings var1
    2. 추출 값의 인덱스를 찾기 위해
    3. 사용 grepl 라인의 lisst를 얻을 수 readlines 메쏘드를 사용하여 데이터를 읽고 새로운 값으로 xx를 사용하여 이름을 지정하십시오. 여기에서 새 값은 1 : 6입니다.
    4. gsubfn을 사용하여 이전 목록을 대체하십시오. 여기

    내 코드

    ll <- readLines(textConnection(object='*** BLOCK B: WATER FLOW INFORMATION ************************************ 
        hTab1 hTabN 
    1e-006 10000 
    M   H 
    0   0 
    var1  var2  var3  var4  var5  var6 
    0.095  0.41  0.03  1.5  0.26  0.5 ')) 
    ## get the line with values 
    id <- which(grepl('var1',ll)) 
    ## 
    
    xx <-strsplit(gsub('[ ]+','|', ll[id+1]),'[|]') 
    
    ## replace values 
    library(gsubfn) 
    vals <- 1:6 
    names(vals) <- xx[[1]] 
    ll[id+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+", as.list(vals), ll[id+1]) 
    
    1] "*** BLOCK B: WATER FLOW INFORMATION ************************************" 
    [2] " hTab1 hTabN"               
    [3] "1e-006 10000"               
    [4] "M   H"                
    [5] "0   0"                
    [6] "var1  var2  var3  var4  var5  var6"      
    [7] "1  2  3  4  5  6 "    
    
  • 0

    이것은 내가 그것을 어떻게 (기본적으로 agstudy에서 솔루션)

    library(gsubfn) 
    l <- readLines("myfile.txt") 
    id1 <- which(grepl('var1',l)) 
    x <-strsplit(gsub('[ ]+','|', l[id1+1]),'[|]') 
    vals1 <- c("",0.095, 0.41, 0.03, 1.5,0.26,999999) # var values to be altered manually, i added "" 
    names(vals1) <- x[[1]] 
    l[id1+1] <- gsubfn("[[:digit:]]+[.][[:digit:]]+", as.list(vals1), l[id1+1]) 
    writeLines(l, "myfile.txt")       # overwrites the old myfile.txt 
    

    /환호

    +0

    면밀히 살펴보면, 나는 당신을 (!) 참조하고 작은 변경 (쓰기 명령)을했다. 추가 검색자를위한 정보입니다. – Toby

    +0

    이 맞습니다. 그러나 텍스트 파일에서 smth를 대체하도록 명시 적으로 요청한대로 대답을 완료했습니다. – Toby