如何在R语言中预过滤向量?一行代码去除files向量的ignore元素
一行代码完成向量生成与过滤的方法
你原来的代码出错是因为!!files里的files还未定义,自然无法用来做判断。要在同一行里完成向量生成和过滤,有几种实用方法:
方法1:基础R子集索引(避免重复计算)
通过临时赋值的方式,不用重复写向量表达式:
files <- (vec <- c("app.R", "global.R", "ui.R", "server.R", "ignore"))[vec != "ignore"]
如果是短向量,也可以直接复用生成表达式(小向量计算成本可忽略):
files <- c("app.R", "global.R", "ui.R", "server.R", "ignore")[c("app.R", "global.R", "ui.R", "server.R", "ignore") != "ignore"]
方法2:使用基础R的Filter()函数
直接对生成的向量应用过滤逻辑:
files <- Filter(function(x) x != "ignore", c("app.R", "global.R", "ui.R", "server.R", "ignore"))
方法3:管道语法(需加载magrittr包)
习惯管道风格的话,加载magrittr后可以这么写:
library(magrittr) files <- c("app.R", "global.R", "ui.R", "server.R", "ignore") %>% .[. != "ignore"]
针对你最初用list.files()的场景,同样套用逻辑即可:
files <- (vec <- list.files())[vec != "ignore"]
内容的提问来源于stack exchange,提问作者ksinva
相关产品推荐
相关产品推荐

