如何在R语言中把数据框列的规则字符串传入validate包的validator函数?
解决validator函数传入字符串规则的问题
正确实现代码
你需要将规则字符串解析为表达式,再通过do.call传递给validator函数,而不是直接拼接字符串。修改后的代码如下:
# 创建示例数据 data(cars) cars2 <- cars %>% head(3) checks <- c("cars3$dist>=0","cars3$speed>=1","cars3$dist+cars3$speed==3") cars3 <- cbind(cars2, checks) # 将规则字符串解析为表达式 rule_exprs <- parse(text = cars3$checks) # 通过do.call将表达式列表传入validator rules <- do.call(validator, as.list(rule_exprs)) # 验证规则是否生效 confront(cars3, rules)
为什么原写法报错
validator函数的设计是接收多个表达式作为参数(比如你期望的validator(cars3$dist>=0, cars3$speed>=1, ...)),而你用paste0拼接后传入的是一个单个字符串。此时validator会把这个字符串当作一个完整的表达式去解析,自然会出现语法错误,因为它不是合法的R表达式。
优化建议
其实在validator的规则中不需要加上数据框前缀(比如cars3$),直接使用列名更简洁通用,后续验证不同数据框时无需修改规则:
# 简化规则字符串 checks <- c("dist>=0", "speed>=1", "dist+speed==3") rule_exprs <- parse(text = checks) rules <- do.call(validator, as.list(rule_exprs)) # 验证数据 confront(cars3, rules)
内容的提问来源于stack exchange,提问作者user30397791
相关产品推荐
相关产品推荐

