[英]How can I write or change some characters in my file in R?
我有一个 PRM 文件,它是一种文本文件。 我想更改其中的一些字符。 例如,“ md = minf; ”到“ md = maxf ;” 和“ ls = 1 ”到“ ls = 3 ”。 你能指导我如何改变它吗? 我不知道在这种情况下如何使用 WriteLines 函数?
> setwd("C:/Users/Documents/CONN")
> fileName <- "Hmin.PRM"
> conn <- file(fileName,open="r")
> linn <-readLines(conn)
> for (i in 1:length(linn)){
+ print(linn[i])
+ }
[1] ""
[1] "begin_pop = \"p1\";"
[1] " beginfounder;"
[1] " male [n = 20, pop = \"hp\"];"
[1] " female [n = 400, pop = \"hp\"];"
[1] " endfounder;"
[1] " ls = 1; "
[1] " pmp = 0.5; "
[1] " ng = 10; "
[1] " md = minf; "
[1] " sr = 0.5; "
[1] " dr = 0.3; "
[1] " sd = ebv /h; "
[1] " cd = ebv /l; "
[1] " ebvest = true_av;"
[1] " begpop;"
[1] " ld /maft 0.1;"
[1] "\t crossover;"
[1] " data;"
[1] " stat;"
[1] " genotype/gen 8 9 10;"
[1] " endpop;"
[1] "end_pop;"
[1] " "
> close(conn)
linn <- c("begin_pop = \\p1\\;", " beginfounder;", " male [n = 20, pop = \\hp\\];", " female [n = 400, pop = \\hp\\];", " endfounder;", " ls = 1;", " pmp = 0.5;", " ng = 10;", " md = minf;", " sr = 0.5;", " dr = 0.3;", " sd = ebv /h;", " cd = ebv /l;", " ebvest = true_av;", " begpop;", " ld /maft 0.1;", "\t crossover;", " data;", " stat;", " genotype/gen 8 9 10;", " endpop;", "end_pop;")
gsub("\\b(ls\\s*=\\s*)1", "\\1 3",
gsub("\\b(md\\s*=\\s*)minf", "\\1maxf", linn))
# [1] "begin_pop = \\p1\\;" " beginfounder;"
# [3] " male [n = 20, pop = \\hp\\];" " female [n = 400, pop = \\hp\\];"
# [5] " endfounder;" " ls = 3;"
# [7] " pmp = 0.5;" " ng = 10;"
# [9] " md = maxf;" " sr = 0.5;"
# [11] " dr = 0.3;" " sd = ebv /h;"
# [13] " cd = ebv /l;" " ebvest = true_av;"
# [15] " begpop;" " ld /maft 0.1;"
# [17] "\t crossover;" " data;"
# [19] " stat;" " genotype/gen 8 9 10;"
# [21] " endpop;" "end_pop;"
正则表达式的解释:
\\b
是一个词边界,所以我们匹配md
但不匹配amd
;\\s*
是零个或多个空格(..)
是一个匹配组,(在这种情况下)我们希望将其带回替换;\\1
正在调用第一个匹配组ls =
和3
之间引入了一个空格(而我没有在maxf
之前添加一个空格)的唯一原因是我希望\\1
和\\13
之间在视觉上绝对没有歧义,这意味着 13 个匹配组。 R 对后者没有问题,但我想我会在正则表达式中保持清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.