如何为多个 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"
假设我在 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"