如何通过使用 grepl() 进行过滤来创建新的 R 向量?

How to create a new R vector by filtering with grepl()?

这是一个简单的问题,但我遗漏了以下内容。

我在 R 中有一个非常大的文件路径向量(即字符串)

vec = c("\dir\subdir\pathname1\file.txt", "\dir\subdir\pathname1\file.pdf",
                                           ...,  "\dir\subdir\pathname9\file.jpg")

我的想法是为每个 "type" 文件创建一个 data.table 对象,例如.txt.pdf等。因此,我需要通过过滤上述内容为每个文件扩展名提供一个R向量。

我搜索具有特定扩展名的字符串的方式是 grepl():

grepl(".txt$", vec)

现在,如何使用 grepl() 创建一个新向量?终点应该是

txt_paths <- # single vector only with txt files
pdf_paths <- # single vector only with pdf files
jpg_paths <- # single vector only with jpg files
etc.

我们可以splitvector变成listvectors

lst <- split(vec, tools::file_ext(vec))
names(lst) <- paste0(names(lst), "_paths")

不建议在全局环境中使用单独的对象,但如果我们更喜欢这种方式,请使用 list2env

list2env(lst, envir = .GlobalEnv)

如果我们需要split通过文件名,

lst2 <- split(vec, tools::file_path_sans_ext(basename(vec)))

数据

vec <- c("\dir\subdir\pathname1\file.txt", 
        "\dir\subdir\pathname1\file.pdf",
        "\dir\subdir\pathname9\file.jpg")

您可以使用 grepl() 生成的逻辑向量来索引 vec。

txt_paths <- vec[grepl(".txt$", vec)]