R语言传入type参数对dataframe按指定列筛选的实现方法
R 自定义筛选函数实现
原有代码问题
- 语法结构不完整:if分支未补全else逻辑、缺少括号闭合,且
starts_with是dplyr用于列选择的专用函数,不适合用于字符串等值判断 - 逻辑覆盖不全:仅写了
type="map"的分支,缺少另外两类type的筛选规则 - 管道操作语法错误:
filter函数未和管道逻辑正确配合
正确实现
首先确保已经加载dplyr包:
library(dplyr)
写法1:case_when 简洁实现
适合筛选规则后续有扩展的场景:
testFun <- function(df, type) { res <- df %>% filter( case_when( type == "map" ~ map_flag == 1, type == "cap" ~ cap_flag == 1, type == "Length" ~ measurement == "Length" ) ) return(res) }
写法2:if-else 易读实现
额外增加了非法入参校验,运行更稳定:
testFun <- function(df, type) { if (type == "map") { res <- df %>% filter(map_flag == 1) } else if (type == "cap") { res <- df %>% filter(cap_flag == 1) } else if (type == "Length") { res <- df %>% filter(measurement == "Length") } else { stop("type参数不合法,可选值为'map'/'cap'/'Length'") } return(res) }
效果测试
用以下代码即可验证输出是否符合预期:
# 测试type=map testFun(df.sample, "map") # 测试type=cap testFun(df.sample, "cap") # 测试type=Length testFun(df.sample, "Length")
内容的提问来源于stack exchange,提问作者Sharath
相关产品推荐
相关产品推荐

