gpt4 book ai didi

R - 在应用函数中访问对象自己的名称

转载 作者:行者123 更新时间:2023-12-04 14:59:34 24 4
gpt4 key购买 nike

这是我经常遇到的问题:我在使用 apply 系列的函数时尝试访问对象自己的名称,并花了几个小时弄清楚如何去做......例如(这是不是我问题的核心),今天我愿意检查一个附加的包,试图弄清楚它是否包含一些非功能对象。经过多次尝试和失败后,我终于想出了(对于 rrapply 包 - 我知道查看文档也很容易,但这个很好地说明了问题):

library(rrapply)

eapply(rlang::pkg_env('rrapply'), function(x) {if(!is.function(x)) x}) %>%
`[`(sapply(., function(x) !is.null(x))) %>%
names()

## [1] "renewable_energy_by_country" "pokedex"

我觉得对于一个简单的测试来说真的太复杂了!

所以我的问题是:有没有一种简单的方法可以循环遍历 base R(或者可能是 tidyverse)中的对象并仅返回与特定条件对应的那些元素的名称? rrapply 似乎能够实现这一目标但是:

  • 它相当复杂
  • 而且它似乎只适用于列表并且循环遍历所有子元素,这是不希望的

谢谢!

最佳答案

识别感兴趣的环境,e,然后使用 eapply 和指定的函数,最后获取提取元素的名称。这在概念上与问题中的代码没有区别,但在 base R 中以下列方式完成时看起来确实不那么复杂:

e <- as.environment("package:rrapply")
names(Filter(`!`, eapply(e, is.function)))

或编写为管道的相同代码:

library(magrittr)

"package:rrapply" %>%
as.environment %>%
eapply(is.function) %>%
Filter(`!`, .) %>%
names

关于R - 在应用函数中访问对象自己的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67241893/

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