在路径分隔符处停止 substr?

Stop substr at path separator?

我想根据文件路径的特定部分来命名文件。 是否可以在路径分隔符处停止 substr ?

例如,我想要一个输出文件读取 "worldclim.csv"

如果我从这个路径中提取数据:"F:\Data\WorldClim\masked\Africa" 我希望输出文件被命名为:"worldclim.csv"

这是一个例子:

(file.out <- runif(4))
(path <- "F:\Data\WorldClim\masked\Africa")
(pname <- sapply(path, function(x) substr(x,start=9,stop=17)))
write.csv(file.out, paste0("F:\Data\extractions\", pname, ".csv"), row.names=F)

但是,我需要为很多目录做这个,"Data"里面的子目录有不同的字符长度。

总之,我希望"file.out"以Data后面的目录命名。 有任何想法吗?

我想你可以简单地拆分 \:

strsplit(path, '\\')[[1]][3]
# [1] "WorldClim"

# or

strsplit(path, '\', fixed = TRUE)[[1]][3]
# [1] "WorldClim"

或使用regex从开始匹配8个字符然后提取模式直到下一个\:

sub('^.{8}([^\]+).*$', '\1', path)
# [1] "WorldClim"

只是为了说明 dirnamebasename:

path <- file.path("F:", "Data", "WorldClim", "masked", "Africa")
basename(dirname(dirname((path))))
# [1] "WorldClim"

这个提供了一个很好的分割路径的功能。然后,您可以在您想要的任何文件夹的索引上进行子集化。我已经将它包装在一个附加函数中(因为原始函数是递归的),以正确的顺序输出。

split_path <- function(x) {
  if (dirname(x) == x) x else c(basename(x), split_path(dirname(x)))
}
splitPath <- function(x) rev(split_path(x))
splitPath(path)[4]
# [1] "WorldClim"