考虑这个简单的例子,它从字符串向量中累积单词“This”的出现次数:
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
Run Code Online (Sandbox Code Playgroud)
我试图了解如何通过sentences传递到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.
Run Code Online (Sandbox Code Playgroud)
编辑:为了更清楚,考虑一种Python方法:
reduce(lambda a, x: a + x.count("This"), sentences, 0)
Run Code Online (Sandbox Code Playgroud)
我对类似的方法感兴趣R,但我不确定这是否可能(?),因为.count是Python.
如果本练习的目的是展示如何从reduce 内部传递参数,str_count那么您可以这样做:
reduce(sentences, function(x, y, p) x + str_count(y, p), p = "This", .init = 0)
#> [1] 3
Run Code Online (Sandbox Code Playgroud)
尽管我认为评论中现有的建议是实现相同结果的更具可读性的方式。展示如何传递附加参数的一种更简单的方法是使用类似于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |