如何在.f中编写带有附加参数的purrr :: reduce函数

时间:2017-10-02 21:19:57

标签: r purrr

考虑这个简单的例子,它累积了单词&#34的出现;这个"从字符串向量:

library(purrr)
library(stringr)

sentences <- c("This is a sentence.",
               "This is another sentence.",
               "One more This")

reduce(str_count(sentences, "This"), `+`)         # SUCCESS! Returns 3

我试图了解如何通过传递给sentences的{​​{1}}来解决这个问题 - 我尝试失败了:

reduce

编辑:为了更加清晰,请考虑采用reduce(sentences, str_count, pattern = "This") # FAILS! unused argument (.x[[i]]) reduce(sentences, ~ str_count, pattern = "This") # FAILS! Returns signature for str_count() reduce(sentences, ~ str_count(pattern = "This")) # FAILS! Argument "string" missing with no default. reduce(sentences, ~ str_count("This")) # FAILS! Returns wrong result, 4. reduce(sentences, ~ str_count(.x, pattern = "This") + str_count(.y, pattern = "This")) # FAILS! Returns wrong result, 1. 方法:

Python

我对类似的reduce(lambda a, x: a + x.count("This"), sentences, 0) 方法感兴趣,但我不确定这是否可行(?)因为R.count中的一种方法

1 个答案:

答案 0 :(得分:4)

如果本练习的目的是展示如何从reduce中将参数传递给str_count,那么你可以这样做:

reduce(sentences, function(x, y, p) x + str_count(y, p), p = "This", .init = 0)
#> [1] 3

虽然我认为评论中的现有建议是一种更易读的方式来实现相同的结果。一种更简单的方法来展示如何传递一个额外的参数是使用类似str_c函数的东西,它将字符串作为参数并返回一个字符串作为结果。

reduce(sentences, str_c, sep = "___")
#> [1] "This is a sentence.___This is another sentence.___One more This"

reduce(sentences, str_c, sep = "___") %>% str_count("This")
#> [1] 3