r查找多个条件的匹配文件

时间:2018-10-17 16:29:53

标签: r file pattern-matching

我在这里阅读了一些文件匹配的帖子,但是我的问题并不完全相同。

我正在尝试查找与3个条件匹配的文件,并且所有3个条件都是循环中另一个3个变量的值,因此看起来我无法直接将变量放入模式语句中

这里是例子

c1 = "Curr Month"
c2 = "Entity Lst Yr"
c3 = "36008"
file_from = "my_path/"

f = list.files(path = paste0(file_from, "Account/"), pattern = glob2rx(c1*c2*c3))

我的错误消息在模式语句中

  

二进制运算符的非数字参数

任何想法都非常感谢,非常感谢!

2 个答案:

答案 0 :(得分:1)

您是否要将c1-3组合为正则表达式,且中间使用通配符?以下工作吗?

    ...
    uniWebView.SetShowSpinnerWhileLoading(true);
    uniWebView.ReferenceRectTransform = gameObject.GetComponent<RectTransform>();

    uniWebView.Show(true);

    uniWebView.LoadHTMLString(YoutubeHTMLString, "https://www.youtube.com/");
}

答案 1 :(得分:0)

Uwe的评论对您来说可能最简单。如果可以按任何顺序排列,那么您需要更有创造力。

由于我没有您的文件或类似文件,因此我将创建一些示例:

# filelisting <- list.files(path=...) # no pattern
filelisting <- c(
  "Rob travel v1.2.docx",
  "the v1.2 version of travel for Rob.xlsx",
  "the v1.3 version of travel for Rob.xlsx",
  "the v1.2 version of travel for Carol.xlsx",
  "something else entirely.pptx",
  "C_Mu.R",
  "My travel v1.2.txt"
)
c1 <- "Rob"
c2 <- "travel"
c3 <- "v1.2"

如果您需要全部三个但允许不同的订单,那么

grepl(paste(c1,c2,c3,sep=".*"), filelisting)
# [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

失败,因为它错过了第二个文件。

这是一个想法:

sapply(c(c1,c2,c3), grepl, filelisting)
#        Rob travel  v1.2
# [1,]  TRUE   TRUE  TRUE
# [2,]  TRUE   TRUE  TRUE
# [3,]  TRUE   TRUE FALSE
# [4,] FALSE   TRUE  TRUE
# [5,] FALSE  FALSE FALSE
# [6,] FALSE  FALSE FALSE
# [7,] FALSE   TRUE  TRUE

从这里,您可以简单地查找所有值都为true的行,例如

apply(sapply(c(c1,c2,c3), grepl, filelisting), 1, all)
# [1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE

(使用该索引在filelisting上进行索引。

如果您有三个以上的条件和/或条件数量可以更改,则可以对此进行概括。

allcs <- c("Rob", "travel", "v1.2", "docx")
apply(sapply(allcs, grepl, filelisting), 1, all)
# [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

在每个字符串中,您可以使用真正的正则表达式类型的东西(这意味着您需要转义正则表达式语言):

allcs <- c("Rob", "travel", "v1.2", "xlsx|docx")
apply(sapply(allcs, grepl, filelisting), 1, all)
# [1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE