2015-04-29 3 views
0

У меня есть скрипт bash, который представляет собой в основном серию команд для загрузки кучи климатических файлов. Среди многих других сведений о скрипте строки 28-1027 определяют фактические файлы, которые необходимо загрузить. Смотрите мой файл:R - как заменить значения в подмножестве вектора

# 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) теперь, что мне нужно сделать, это заменить все содержимое элементов 28 до 1027 исходного файла содержимым переменной «new.r. линии». Результат также должен быть вектором, потому что к концу скрипта я буду использовать writeLines для создания нового файла.

Это, вероятно, очень простая задача, но я просто застрял на этом шаге.

Любая помощь очень ценится!

Thanks, Thiago.

ответ

2

Вы можете создать новый набор строк файла следующим образом:

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))]; 
+0

Большое спасибо @bgoldst. Я не могу представить себе лучшую идею! – thiagoveloso