r - 在 r 中创建一个带有布尔选项的函数:如果在调用函数时没有提供布尔选项,我如何返回数据帧?
问题描述
我得到了一个函数的以下代码:
data_function <- function(df,condtion_a,condition_b, condition_c= TRUE) {
df <- df %>%
filter(col_a == condtion_a & col_b == condition_b)
if(condition_c == TRUE) {
df %>% filter(col_c== TRUE)
} else if(condition_c== FALSE) {
df %>% filter(col_c == FALSE)
}
else {
return(df)
}
}
当我给TRUE
或FALSE
给condition_c时,代码有效。但是,我想要一个选项,df <- df %>% filter(col_a == condtion_a & col_b == condition_b)
当 condition_c 不是TRUE
或时只返回代码的一部分FALSE
。例如,我想使用此功能以三种方式工作:
data_function(df,condtion_a,condition_b, condition_c= TRUE)
data_function(df,condtion_a,condition_b, condition_c= FALSE)
data_function(df,condtion_a,condition_b)
后者只返回调用函数时不存在的 df <- df %>% filter(col_a == condtion_a & col_b == condition_b)
部分。condition_c
我觉得这是一件非常简单的事情,但想不出如何解决这个问题。谢谢!
解决方案
基于该函数,在应用条件return(df)
之前返回数据集,if/else
因为其输出未更新为“df”
data_function <- function(df,condtion_a,condition_b, condition_c) {
# subset the rows of the dataset and update it to same object
df <- df %>%
filter(col_a == condtion_a & col_b == condition_b)
df1 <- if(missing(condition_c)) {
df
} else {
# apply the `if/else if/else` and assign it to a new object or same object
if(condition_c) {
df %>%
filter(col_c)
} else if(!condition_c) {
df %>%
filter(!col_c)
}else {
df
}
}
return(df1)
}
推荐阅读
- java - 这段代码中的增长函数和顺序是什么?
- ios - 尝试使用 reverseGeocodeLocation,但未执行 completionHandler 代码
- python - Python:我正在尝试调用一个函数,但预期的结果不会出现
- vim - 从 vim 运行一个打开另一个窗口的程序会弄乱我的终端的格式
- python-3.x - 删除值超出边界的行
- python - Python中的TCP发送错误-套接字的协议类型错误
- conan - 是否可以将柯南包从柯南中心移动到气隙网络上的私人注册表?
- c# - 当我使用下划线符号时,属性 JsonProperty 与 .NET Core 3.1 一起工作不正确
- javascript - adonisjs 控制器中的更新方法
- mysql - 工作台因连接而崩溃 | 使用触发器和存储过程执行更新命令