假设我有一个在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 ,我将使用 system
运行终端命令我知道 strsplit 有可能,但是,我不是R中操作文件名的专家。请问有人知道这种可能性吗?
答案 0 :(得分:4)
为此,您可以直接使用功能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"
答案 1 :(得分:3)
您可以使用gsub()
替换字符串中的模式。通过将替换设置为空字符串,您可以有效地从字符串中删除匹配项。所以
gsub(x = paths, pattern = "[^/]+$", replacement = "")
将删除最后一个/
之后的路径的最后一部分。正则表达式"[^/]+$"
与直到字符串末尾的/
都匹配。然后,我们将匹配项替换为""