【问题标题】:predicate function in map地图中的谓词函数
【发布时间】:2023-03-13 11:12:01
【问题描述】:

我最近一直在研究purrr 家庭函数,在阅读map_if 的文档时,我遇到了.p 参数的另一种定义形式。我无法理解的谓词函数。它说:

“或者,如果 .x 的元素本身就是对象列表, 表示内部列表中逻辑元素名称的字符串"

我想知道当我处理一个元素也是列表的列表时,您能否告诉我它的含义以及如何使用它。像这样的:

x <- list(a = list(foo = 1:2, bar = 3:4), b = list(baz = 5:6))

非常感谢一个简单的例子,因为我做了一些研究,但找不到任何迹象。

非常感谢您。

【问题讨论】:

  • 我找不到任何在谓词函数中传递/返回字符串的示例。它们都只返回一个逻辑值。
  • @RonakShah 你是对的,我可以理解“指示逻辑元素名称的字符串......”的含义。我想我可以联系作者。顺便谢谢你。

标签: r tidyverse purrr


【解决方案1】:

虽然我不完全确定你到底想了解什么,但以列表列表为例,我们需要考虑到这里只有map_if 可用,pmap_if 不可用。让我们再列出一个您建议的列表。

x <- list(a = list(foo = 1:2, bar = 3:4), b = list(baz = 5:6), c = list(bird = 7:10))

现在map_if 适用于.f,只要.pT。因此,如果我们想对列表 x 中的所有奇数索引列表取平均值,我们实际上必须再次使用嵌套的 map

map_if(x, as.logical(seq_along(x) %% 2) , ~map(.x, ~mean(.x)))

$a
$a$foo
[1] 1.5

$a$bar
[1] 3.5


$b
$b$baz
[1] 5 6


$c
$c$bird
[1] 8.5

我们还可以在.p 中使用其他谓词函数。下面的示例产生相同的输出。

map_if(x, names(x) %in% c("a", "c") , ~map(.x, ~mean(.x)))

或者如果我们说x 被命名为这样的东西

x <- list(val1 = list(foo = 1:2, bar = 3:4), ind1 = list(baz = 5:6), val2 = list(bird = 7:10))

那么下面的语法会产生类似的结果

map_if(x, str_detect(names(x), "val") , ~map(.x, ~mean(.x)))

我希望这有点接近你可能想要了解的内容。

附:您也可以阅读 it

【讨论】:

  • 亲爱的 Anil,感谢您的解释。我当时问这个问题的原因是我在.p 的文档中找不到该短语的示例,该短语表示“一个字符串,指示内部列表中逻辑元素的名称”。我已经阅读了高级 R,但这是一个非常罕见的案例,我找不到任何示例。我不确定它是否普遍或有用,但当时它引起了我的注意。
  • 在我发布答案后,我实际上明白了你的意思。如果您找到示例或解释,请标记我。如果您建议我可以删除此答案,因为它实际上并未回答您的查询。同时我也在寻找它的解释。
  • 不,这是一个很好的解释。让它留在这里,因为它涵盖了一些关于map_if 函数应用的非常好的例子,这些例子也可能在未来帮助人们。但是,如果我发现任何东西,我会与您分享,就像我们在过去几天所做的那样。文档中的那句话对我来说有点模棱两可,但我希望我们能找到一个合适的例子。
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多