如何为多个 list.files 提取 R 中“/”之前的路径?

How do I extract the path before the "/" in R for multiple list.files?

假设我在 R:

中使用 list.files() 获得了下一个向量
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/"

我需要这个,因为我想创建一个循环,其中对于向量 new_paths 中的每个 i,我将 运行 使用 系统

我知道 strsplit 有可能,但是,我不是在 R 中处理文件名的专家。有人知道这种可能性吗?

您可以使用gsub() 来替换字符串中的模式。通过将替换设置为空字符串,您可以有效地从字符串中删除匹配项。所以

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

将删除最后一个 / 之后的路径的最后一部分。正则表达式 "[^/]+$" 匹配任何不是 / 的内容,直到字符串结尾。然后我们用 ""

替换那个匹配项

为此你可以直接使用函数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"