【问题标题】:Is there a way to reference files in a folder within the working directory in R?有没有办法在 R 的工作目录中引用文件夹中的文件?
【发布时间】:2022-08-04 21:06:49
【问题描述】:

我已经完成了我的 RMarkdown,我正在尝试清理一下工作区。这不是完全必要的事情,而是更多的组织实践,我什至不确定这是否是一个好的实践,以便我可以将数据与某些脚本和其他 R 和 git 相关文件分开。

我有一堆 .csv 文件用于我使用的数据。以前他们在(例如)

C:/Users/Documents/Project

这是我设置为我的工作目录。但现在我想让他们进来

C:/Users/Document/Project/Data

问题是这只会破坏以下代码,因为它们不在 wd 中。

#create one big dataframe by unioning all the data
bigfile <- vroom(list.files(pattern = \"*.csv\"))

我尝试将 list.files() 的完整路径添加到 csv 所在的位置,但没有运气。

bigfile <- vroom(list.files(path = \"C:/Users/Documents/Project/Data\", pattern = \"*.csv\"))
Error: \'data1.csv\' does not exist in current working directory (\'C:/Users/Documents/Project\').

有没有办法只访问一次 /Data 文件夹以使用 vroom() 创建我的数据框,而不是多次更改工作目录?

    标签: r


    【解决方案1】:

    您可以使用list.files(pattern = "*.csv", recursive = TRUE) 列出所有子目录中的文件(尤其是Data

    最佳实践

    • 只有一个原始数据目录(您测量的数据)
    • 拥有另一个外部数据目录(例如参考数据库)。这是您可以在之后删除并在需要时重新下载的内容。
    • 为源代码提供另一个目录
    • 仅将源代码目录置于版本控制之下,再加上一个包含原始数据和外部数据校验和的其他文件,以证明完整性
    • 使用原始数据和源代码必须可以重现所有其他内容。这可以在项目之后删除。也许您想保留需要很长时间才能重现的小型结果文件(例如表格)。

    【讨论】:

      【解决方案2】:

      您可以列出文件并捕获完整的文件路径名称吗?

      bigfile <- vroom(list.files(path = "C:/Users/Documents/Project/Data", pattern = "*.csv", full.names = T))
      

      并且应该在不参考您的 wd 的情况下读取目录中的文件

      【讨论】:

        【解决方案3】:

        尝试其中之一:

        # list all csv files within Data within current directory
        Sys.glob("Data/*.csv")
        
        # list all csv files within immediate subdirectories of current directory
        Sys.glob("*/*.csv")
        

        如果您只有 csv 文件,那么这些也可以工作,但似乎不太理想。如果您想快速查看那里有哪些文件和目录,可能会很有用。 (我会非常小心,不要在语句中使用第二个来删除文件,因为如果您不在您认为它所在的目录中,那么您可能会最终删除您不打算删除的文件。第一个也可以但是更安全一点,因为如果您所在的目录确实有一个 Data 子目录,它只会导致删除错误的文件。)

        # list all files & directories within Data within current directory
        Sys.glob("Data/*")
        
        # list all files & directories within immediate subdirectories of current directory
        Sys.glob("*/*")
        

        【讨论】:

          【解决方案4】:

          如果子文件夹始终具有相同的名称(或相同数量的字符),您应该能够通过子字符串来做到这一点。在您的示例中,“数据”有 4 个字符(5 个带有 /),所以下面的代码应该这样做:

              Repository <- substring(getwd(), 1, nchar(getwd())-5)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-14
            • 1970-01-01
            • 1970-01-01
            • 2018-06-10
            • 2020-04-16
            相关资源
            最近更新 更多