Как мне извлечь путь перед "/" в R для нескольких list.files? - PullRequest
0 голосов
/ 04 января 2019

Допустим, у меня есть следующий вектор, полученный с помощью list.files () в R:

paths <- c("/home/user/myfolder/ERA/amsterdam/amsterdam1.nc", "/home/user/myfolder/ERA/amsterdam/amsterdam2.nc", 
       "/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris1.nc", "/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris2.nc",
       "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/helsinki1.nc")

nchar(paths)
[1] 47 47 55 55 63

Как видите, путь вектора имеет объекты разного размера.

Я хочу получить новый вектор со всеми объектами из путей, но без имен файлов изнутри, что-то вроде:

> new_paths
[1] "/home/user/myfolder/ERA/amsterdam/"                   
"/home/user/myfolder/ERA/amsterdam/"                  
[3] "/home/user/myfolder/CLMcom/HadCruz/run1/paris/"       
"/home/user/myfolder/CLMcom/HadCruz/run1/paris/"      
[5] "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/"

Мне это нужно, потому что я хочу создать цикл, в котором для каждого i в векторе new_paths я буду запускать команду терминала, используя system

Я знаю, что есть возможность с strsplit , однако, я не эксперт в манипулировании именами файлов в R. Кто-нибудь знает такую ​​возможность, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Для этого вы можете использовать функцию dirname напрямую

dirname(paths)

#[1] "/home/user/myfolder/ERA/amsterdam"                  
#[2] "/home/user/myfolder/ERA/amsterdam"                  
#[3] "/home/user/myfolder/CLMcom/HadCruz/run1/paris"      
#[4] "/home/user/myfolder/CLMcom/HadCruz/run1/paris"      
#[5] "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki"
0 голосов
/ 04 января 2019

Вы можете использовать gsub() для замены шаблона в строках. Установив замену на пустую строку, вы можете эффективно удалить совпадение из строки. Итак

gsub(x = paths, pattern = "[^/]+$", replacement = "")

удалит последнюю часть пути после последнего /. Регулярное выражение "[^/]+$" соответствует всему, что не является / до конца строки. Затем мы заменяем это совпадение на ""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...