gpt4 book ai didi

r - 根据谓词函数使元素成为 NA

转载 作者:行者123 更新时间:2023-12-04 11:07:00 24 4
gpt4 key购买 nike

如何根据谓词轻松地将列表或向量的元素更改为 NA

我需要它在一次调用中完成,以便在 dplyr::mutate 调用等中顺利集成...

预期输出:

make_na(1:10,`>`,5)
# [1] 1 2 3 4 5 NA NA NA NA NA

my_list <- list(1,"a",NULL,character(0))
make_na(my_list, is.null)
# [[1]]
# [1] 1
#
# [[2]]
# [1] "a"
#
# [[3]]
# [1] NA
#
# [[4]]
# character(0)

注意:

我回答了我的问题,因为我找到了一个解决方案,但我很乐意获得替代解决方案。也可能这个功能已经存在于基础 R 中或打包在一个著名的库中

受到我在 my answer to this post 中的挫败感的启发

最佳答案

我们可以构建以下函数:

make_na <- function(.x,.predicate,...) {
is.na(.x) <- sapply(.x,.predicate,...)
.x
}

或者更好地利用 purrr 的魔力:

make_na <- function(.x,.predicate,...) {
if (requireNamespace("purrr", quietly = TRUE)) {
is.na(.x) <- purrr::map_lgl(.x,.predicate,...)
} else {
if("formula" %in% class(.predicate))
stop("Formulas aren't supported unless package 'purrr' is installed")
is.na(.x) <- sapply(.x,.predicate,...)
}
.x
}

这样,如果库 purrr 可用,我们将使用 purrr::map_lgl,否则sapply

一些例子:

make_na <- function(.x,.predicate,...) {
is.na(.x) <- purrr::map_lgl(.x,.predicate,...)
.x
}

一些用例:

make_na(1:10,`>`,5)
# [1] 1 2 3 4 5 NA NA NA NA NA

my_list <- list(1,"a",NULL,character(0))
make_na(my_list, is.null)
# [[1]]
# [1] 1
#
# [[2]]
# [1] "a"
#
# [[3]]
# [1] NA
#
# [[4]]
# character(0)

make_na(my_list, function(x) length(x)==0)
# [[1]]
# [1] 1
#
# [[2]]
# [1] "a"
#
# [[3]]
# [1] NA
#
# [[4]]
# [1] NA

如果安装了 purrr,我们可以使用这个短格式:

make_na(my_list, ~length(.x)==0)

关于r - 根据谓词函数使元素成为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50665776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com