R - 如何替换向量子集中的值

R - how to replace values in a subset of a vector

我有一个 bash 脚本,它基本上是用于下载一堆气候文件的一系列命令。在脚本的许多其他信息中,第 28 行到 1027 行确定了应该下载的实际文件。查看我的文件:

# point to file
file <- 'https://dl.dropboxusercontent.com/u/27700634/wget-ESG-files.sh'

# read file content
r.lines <- readLines(con=file)

我需要做的是:

1) 检测文件名中的模式,仅对我真正需要下载的文件进行子集化。这个我可以,看代码:

# choose variable name. 
# in this case, average monthly precipitation
var <- 'pr_Amon'

# find only the lines that contain my variable of interest 
new.r.lines <- r.lines[grepl(var, r.lines)]
new.r.lines

2) 现在,我需要做的是用变量"new.r.lines"的内容替换原文件中第28到1027个元素的所有内容。结果也必须是向量,因为在脚本结束时我将使用 writeLines 创建一个新文件。

这可能是一个非常简单的任务,但我只是卡在了这一步。

非常感谢任何帮助!

谢谢, 蒂亚戈.

您可以按如下方式构建新的文件行集:

new.r.lines <- c(r.lines[1:27],r.lines[28:1027][grepl(var,r.lines[28:1027])],r.lines[1028:length(r.lines)]);

这会将第 1:27 行与以下 28:1027 行中符合您的搜索模式的子集组合在一起,然后进一步与第 1028 行组合到文件末尾。因此,您可以将其传递给 writeLines() 以创建新文件。

这里有一个稍微简洁的方法,建立一个索引向量,然后索引一次线向量:

new.r.lines <- r.lines[c(1:27,27+grep(var,r.lines[28:1027]),1028:length(r.lines))];