gpt4 book ai didi

r - 在 R 中访问具有字符串名称的命名嵌套列表元素

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

我正在尝试通过将名称作为字符串(或字符串列表)传递来找到一种访问命名嵌套列表元素的方法。类似你可以用 attr(the_thing, "the_attr") 做的事情但我想做attr(the_thing, "$attr1$attr2$attr3") .看起来这应该是可能的,但我不知所措。

例如,我正在编写一些代码来使用来自 Github API 的响应。有很多功能,例如(为了举例,这些功能非常简化):

get_milestone <- function(org, repo) {
response <- graphql_query(org = org, repo = repo)
return(response$repository$milestone$issues)
}
get_pull_request <- function(org, repo) {
response <- graphql_query(org = org, repo = repo)
return(response$repository$pull_request$issues)
}
get_issues <- function(org, repo) {
response <- graphql_query(org = org, repo = repo)
return(response$repository$issues)
}

您会注意到唯一的区别是您从响应中提取了哪些属性。

我想制作简单的辅助函数,例如

get_something <- function(org, repo, attr_to_get) {
response <- graphql_query(org = org, repo = repo)
return(attr(response, attr_to_get))
}

然后每次都调用它

get_something(org, repo, attr_to_get="$repository$milestone$issues")
get_something(org, repo, attr_to_get="$repository$pull_request$issues")
get_something(org, repo, attr_to_get="$repository$issues")

但该语法不起作用。

有什么方法可以传递一个字符串来指定要从对象中提取的嵌套属性吗?我觉得 rlang 或类似的东西可能是相关的,但我似乎无法弄清楚。

我最初的想法就是做这样的事情

param_list <- unlist(strsplit(attr_to_get, "\\$"))
for (p in param_list) {
if (p != "") {
response <- response[[p]]
}
}

但这对我来说感觉非常丑陋和愚蠢。就像,必须有一种无需手动迭代即可执行此操作的单行方法。但也许我应该那样做?非常感谢任何帮助。

为了可重复性,您可以替换 response <- graphql_query(org = org, repo = repo)在我的函数中使用类似 response <- list(repository = list(milestone = list(issues=c("issue1", "issue2", "issue3")))) 的行然后尝试提取 "$repository$milestone$issues"从回应。谢谢!

最佳答案

你可以做到

 nm <- c("repository","milestone","issues")
response[[nm]]

我们也可以使用purrr::pluck函数

  purrr::pluck(response, !!!nm)

关于r - 在 R 中访问具有字符串名称的命名嵌套列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723748/

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