考虑这个简单的例子,它累积了单词&#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
中的一种方法
答案 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