在路径分隔符处停止 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"
只是为了说明 dirname
和 basename
:
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"
我想根据文件路径的特定部分来命名文件。 是否可以在路径分隔符处停止 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"
只是为了说明 dirname
和 basename
:
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"