有什么问题:条件的长度> 1并且只使用第一个元素?

数据挖掘 r 在家工作
2021-09-30 03:46:47

r的新手。我有:

> > age <- function(Age) {
> +     answer<-NULL
> +     if(Age<15) answer<-"under 15"
> +     else if(15<=Age&&Age<=50) answer<-"15 to 50"
> +     else answer<-"over 50"
> +     answer
> + }
> > titanic_3 <- titanic %>% 
> +     select(Survived, Pclass, Age, Sex) %>%
> +     filter(!is.na(Age)) %>%
> +     mutate(agecat=age(Age)) Warning message: In if (Age < 15) answer <- "under 15" else if (15 <= Age && Age <=  :   the condition has
> length > 1 and only the first element will be used
> >

如果我使用一个 & 而不是 &&,我会收到两个警告。我知道其中之一是因为捷径。

我如何编写此函数以消除警告消息?

谢谢

编辑:我试过:

age <- function(Age) {
    answer<-NULL
    if(Age<15) answer<-"under 15"
    else if(Age<=50) answer<-"15 to 50"
    else answer<-"over 50"
    answer
}

并收到更多警告:

Warning messages:
1: In if (Age < 15) answer <- "under 15" else if (Age <= 50) answer <- "15 to 50" else answer <- "over 50" :
  the condition has length > 1 and only the first element will be used
2: In if (Age <= 50) answer <- "15 to 50" else answer <- "over 50" :
  the condition has length > 1 and only the first element will be used

这个似乎可行,但他们希望我们使用 cut。

age2 <- function(Age) {
    ifelse(Age<15,"under 15",ifelse(Age<=50,"15 to 50","over 50"))
}
1个回答

您收到警告的原因是 Age 是一个向量,但您将它与一个标量进行比较。R 自动获取 Age 的第一个元素。如果需要,您可以使用“ifelse”并转换类。

如果您想将自己限制为基础 R,您可以使用以下内容:

age <- function(Age){
    sapply(Age, function(x) if(x < 15) "under 15" else if (x <= 50) "15 to 50" else "over 50")
}