我想根据文件路径的特定部分命名文件。 是否可以在路径分隔符处设置子站点?
例如,我想要一个输出文件来读取" 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)
但是,我需要为许多目录执行此操作,以及&#34; Data&#34;中的子目录。有不同的字符长度。
简而言之,我想&#34; file.out&#34;以Data后面的目录命名。 有任何想法吗?
答案 0 :(得分:2)
我想你可以简单地分开\\
:
strsplit(path, '\\\\')[[1]][3]
# [1] "WorldClim"
# or
strsplit(path, '\\', fixed = TRUE)[[1]][3]
# [1] "WorldClim"
或使用regex
匹配开始时的8个字符,然后将模式提取到下一个\\
:
sub('^.{8}([^\\]+).*$', '\\1', path)
# [1] "WorldClim"
答案 1 :(得分:1)
只是为了说明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"
这个answer为分割路径提供了很好的功能。然后,您可以对您想要的任何文件夹的索引进行子集化。我把它包装在一个附加函数中(因为原始函数是递归的),以正确的顺序输出到输出。
public function user_has_submitted_in_dog_category() {
return $this->user_has_submitted_in_animal_category( 'dog' );
}