2013-06-21 44 views
1

我想用 我的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

我得到這個解決方案,也許別人來簡單。

  1. 讀取使用readlines方法得到線的lisst
  2. 使用grepl數據發現使用strsplit行contaings在AA矢量var1
  3. 提取值的指標:XX
  4. 創建載體的新列表,使用新值並將其命名爲xx:此處新值爲1:6
  5. 使用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

相關問題