r - 根据.R中的条件更改过滤中的运算符
问题描述
我正在编写一个函数,它应该根据输入向量的长度以两种不同的方式过滤数据!
library(dplyr)
DF = function(country = c("Belgium", "USA", "India")) {
operator = ifelse(length(country) == 1, "|" , "&")
some_data = data %>%
filter(Actor1CountryCode %in% country & Actor2CountryCode %in% country)
return( some_data )
}
但如果我country = "Germany"
只选择,我希望运算符从“&”切换到“|”。
运算符应该以某种方式成为最终过滤器功能的一部分。我的“真实”过滤功能非常大,所以我只想使用一个过滤功能。有人知道如何编写智能函数吗?
解决方案(如果要复制):
library(dplyr)
data = data.frame(
Actor1CountryCode = c("Belgium", "USA", "India", "Pakistan", "Germany"),
Actor2CountryCode = c("Belgium", "USA", "India", "Germany", "Russia") ,
sentiment = c( 1,2,3,4,5 ) )
DF <- function(country) {
operator <- if (length(country) == 1) `|` else `&`
some_data = data %>%
filter(operator(Actor1CountryCode %in% country, Actor2CountryCode %in% country))
return(some_data)
}
DF(c("Belgium", "USA", "India"))
DF("Germany")
解决方案
您可以使用 ``|
像函数一样使用运算符:
`|`(TRUE, FALSE)
[1] TRUE
因此,这是一种可能的解决方案:
DF <- function(country) {
operator <- if (length(country) == 1) `|` else `&`
some_data = data %>%
filter(operator(Actor1CountryCode %in% country, Actor2CountryCode %in% country))
}
DF(c("Belgium", "USA", "India"))
DF("Germany")
推荐阅读
- pyomo - libpynumero_ASL 适用于 Windows 吗?
- java - 如何从 FP 转换为 OOP - Java 文本分析
- solr - Sitecore 8.2:索引管理器中未列出所有索引
- scala - 如何使用jsoup提取没有类的div?
- mysql - 如何计算表的连续范围
- python - 根据父ID合并来自同一数据帧的多行
- ios - 为什么我在 swift5 中无法从模拟器中获取设备令牌?
- python - Python:如何获取仅出现在一组列表中的项目?
- excel-formula - 如何将两种细胞体验合二为一
- android - 如何在使用 Surface 视图时添加视频过渡?