使用R将变量覆盖到文本文件中的特定位置

时间:2013-06-21 16:51:51

标签: r text-files overwrite

我试图用现有的文本文件(参见下面的摘录)“替换”变量 我的R脚本。 变量称为var1到var6,下面的值需要重新定义。文本文件中变量的位置始终相同。

*** 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 

有人有任何想法吗? 亲切的问候

2 个答案:

答案 0 :(得分:1)

我得到了这个解决方案,也许其他人更简单。

  1. 使用readLines读取数据以获取最新的行
  2. 使用grepl查找包含行var1
  3. 的索引
  4. 使用strsplit:xx
  5. 在向量中提取值
  6. 创建一个新的vector列表,使用新值并使用xx命名:此处新值为1:6
  7. 使用gsubfn替换旧列表。
  8. 这是我的代码

    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 "               
    

答案 1 :(得分: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

/欢呼声