gpt4 book ai didi

r - 在 R 中,如何找到位于工作目录之上的任何父目录中的文件?

转载 作者:行者123 更新时间:2023-12-05 08:21:58 25 4
gpt4 key购买 nike

当我位于给定的工作目录中时,我如何才能找到位于任意多个级别的文件?

我想按文件名搜索文件,但我不知道文件是在上一级目录中,还是在更高一级目录中。因此,我正在寻找一种每次都上一级并搜索文件的方法。找到后,我想获取文件的绝对完整路径。

为此,我正在尝试使用 {fs} 程序包,但目前还不知道如何操作。

例子

library(fs)

set.seed(2021)

## create a folder in location temp
tmp <- dir_create(file_temp())
tmp
#> /tmp/Rtmpw2JtlE/file31f26c45d04

## create a txt file in `tmp` path
file_create(path(tmp, "my-file.txt"))

## verify the file now exists in `tmp`
dir_ls(tmp)
#> /tmp/Rtmpw2JtlE/file31f26c45d04/my-file.txt

## create a subdirectory within `tmp`, calling it `my_dir`
dir_create(tmp, "my_dir")

## create a subdirectory within `my_dir`, calling it `another_dir`
dir_create(path(tmp, "my_dir_1"), "another_dir")

## create a subdirectory within `another_dir`, calling it `another_dir_2`
dir_create(path(tmp, "my_dir_1"), "another_dir", "another_dir_2")

## now we set the working directory to be at tmp/my_dir_1/another_dir/another_dir_2/
setwd(path(tmp, "my_dir_1", "another_dir", "another_dir_2"))

## verify that the working directory has been set correctly
getwd()
#> [1] "/tmp/Rtmpw2JtlE/file31f26c45d04/my_dir_1/another_dir/another_dir_2"

我在上面的代码中所做的是创建以下树:

tmp
├── my-file.txt
├── my_dir
└── my_dir_1
└── another_dir
└── another_dir_2 ## now this is the working directory

鉴于我的工作目录是another_dir_2,而目标文件是my-file.txt,我如何找到没有 知道它向上 3 层吗?也就是说,我想先检查一个级别(即 another_dir),如果 my-file.txt 存在,则返回文件的完整路径.如果在 another_dir 中没有找到它,则转到另一层并在那里搜索,依此类推,直到找到它。

期望的解决方案

类似于:

find_up("my-file.txt")

## which will return:
[1] "/tmp/Rtmpw2JtlE/file31f26c45d04/my-file.txt"

知道如何使用 base Rfs 实现这一点吗?

谢谢!

最佳答案

我会利用 list.files 和所有附带的参数以及设置最大高度参数,以及您是在第一个匹配处停止还是继续直到达到最大高度:

find_up(pattern = "my-file.txt")
# [1] "my-file.txt"
find_up(pattern = "my-file.txt", full.names = TRUE)
# [1] "/private/var/folders/mm/vnxjlghn6c79lr0_hd9119tc0000gn/T/Rtmp6UyBzM/file1bed1d2d02f2/my-file.txt"
find_up(pattern = 'my-file1.txt')
# character(0)

find_up(pattern = 'dir')
# [1] "another_dir_2"
find_up(pattern = 'dir', first = FALSE)
# [1] "another_dir_2" "another_dir" "my_dir" "my_dir_1"


find_up <- function(path = getwd(), pattern, maxheight = Inf, first = TRUE, ...) {
level <- 0L
lf <- NULL
while (level <= maxheight) {
lf <- c(lf, list.files(path, pattern, ...))
if (first && length(lf) || path == dirname(path))
break
level <- level + 1L
path <- dirname(path)
}
lf
}

关于r - 在 R 中,如何找到位于工作目录之上的任何父目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67791408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com