【发布时间】:2020-04-10 01:03:46
【问题描述】:
我正在尝试创建一个函数,该函数接收一个单词并根据该单词所属的组返回一个数字,我创建了以下函数,该函数仅适用于单个输入:
get_humor <- function(x) {
feeling <- str_to_lower(x)
if (x %in% group5) return(5)
if (x %in% group4) return(4)
if (x %in% group3) return(3)
if (x %in% group2) return(2)
if (x %in% group1) return(1)
}
我知道我可以使用嵌套的 ifelses,像这样:
ifelse(x %in% nv5, 5,
ifelse(x %in% nv4, 4,
ifelse(x %in% nv3, 3,
ifelse(x %in% nv2, 2, 1))))
但是有一种方法可以在不使用其他辅助函数(如lapply() 或Vectorize())的情况下制作此函数的矢量化版本?
【问题讨论】:
-
sapply(word_list, FUN = function(x) ifelse(x %in% nv5, 5, ifelse(x %in% nv4, 4, ifelse(x %in% nv3, 3, ifelse(x %in% nv2, 2, 1)))))应该可以解决问题。ifelse是矢量化的,但是如果您将矢量x与另一个带有%in%的矢量进行比较,您可能会遇到逻辑回收问题。 -
也许
dplyr::case_when() -
为了矢量化,您应该使用组列表:
groups <- list(group1, group2, ..., group5) -
请提供一个可重现的例子。我认为您可以使用单个
match语句将其矢量化
标签: r function if-statement vectorization