首页 > 解决方案 > 当 R 中不满足条件时,如何让 IF 语句的 ELSE 部分输出自定义消息?

问题描述

如果表包含性别或性别,我想使用 IF 语句输出性别/性别计数。我正在使用 R markdown 并希望它输出一条消息,例如“此数据集中没有性别/性别变量”,如果数据集中没有性别/性别变量,则移动到下一个块。如果我在包含性别或性别的表上运行我的代码,它运行没有任何问题,但如果表不包含性别或性别,它将抛出错误“缺少 TRUE/FALSE 需要的值”,我想要我自己的自定义消息而不是错误。下面是我的代码:

sex_or_gender <- location %>%
  select_if(names(.) %in% "sex" | names(.) %in% "gender")

if(names(location) %in% "sex" || names(location) %in% "gender") {
    sex_or_gender %>%
        group_by(sex_or_gender[1] %>%
        summarise(sex_count = n())
} else{
     print("No gender/sex variable in this dataset")
}

Result should be either;
|sex| sex_count|
| M |   256    |
| F |   301    |
| NA|   25     |

或者

|gender| sex_count|
|   M  |   256    |
|   F  |   301    |
|   NA |   25     |

或者

No gender/sex variable in this dataset

注意:返回的数据框仅包含一个变量,性别或日期取决于使用的变量

标签: rif-statement

解决方案


我认为诀窍是在条件中使用any()

library(dplyr)
name <- c("john", "sue", "terrence", "amy.Smith")
height <- c(68, 62, 66, 70)
weight <- c(170, 110, 155, NA)
sex <- c("Male", "Female", "Male", "Female")
gender <- c("0", "1", "2", "2")
loc1 <- data.frame(
  name = name,
  height = height,
  Weight = weight,
  sex = sex,
  gender = gender
)

loc2 <- data.frame(
  name = name,
  height = height,
  Weight = weight
)

sex_or_gender <- loc1 %>%
  select_if(names(.) %in% "sex" | names(.) %in% "gender")

if (any(names(loc1) %in% "sex") || any(names(loc1) %in% "gender")) {
  sex_or_gender %>%
    group_by(sex_or_gender[1]) %>%
    summarise(sex_count = n())
}
#> # A tibble: 2 x 2
#>   sex    sex_count
#> * <fct>      <int>
#> 1 Female         2
#> 2 Male           2

sex_or_gender <- loc2 %>%
  select_if(names(.) %in% "sex" | names(.) %in% "gender")

if (any(names(loc2) %in% "sex") || any(names(loc2) %in% "gender")) {
  sex_or_gender %>%
    group_by(sex_or_gender[1]) %>%
    summarise(sex_count = n())
} else {
  print("No gender/sex variable in this dataset")
}
#> [1] "No gender/sex variable in this dataset"

reprex 包(v0.3.0)于 2021-03-04 创建


推荐阅读