在自定义函数中包含额外的(ellipsis/dot 点)参数

Include extra (ellipsis/dot dot dot) arguments within custom function

我正在做一个关于文本挖掘的项目,因此我想编写一个小函数来计算文本中不同标记的数量。标记化是由函数 tidytext::unnest_token 完成的,它基本上是 tokenizers::tokenize_ngrams 与管道一起使用的包装器。我目前的做法如下:

count_tokens <- function(data,output,token="words", ...){
  data %>% 
    select(textcolumn) %>% 
    tidytext::unnest_tokens(tbl=output, input=textcolumn, ...) %>% 
    n_distinct()
}

只要我使用来自 tidytext::unnest_token 的参数,例如 to_lowerdrop,它就可以正常工作(即使使用 ...)。 count_tokens(data, word, to_lower = FALSE) 工作正常!

现在,tidytext::unnest_token 的文档指出 ... 也可以用作传递给分词器的 额外参数,例如 strip_punct 用于“单词”和“tweets”,nk 用于“ngrams”和“skip_ngrams”,(...)。 但是,如果我包含参数 n 从我的函数中的省略号参数,它崩溃了。

count_tokens(data, ngram, token = "ngrams", to_lower = FALSE, n = 10) 显示以下错误消息:

Error in tf(col, lowercase = to_lower, ...) : unused argument (n = 10)

有人可以指出正确的方向,甚至可以告诉我需要如何调整我的代码吗?

首先,您的示例似乎无效。 对我来说,更新后的功能可以正常工作。

library(dplyr)
library(tidytext)
library(janeaustenr)

count_tokens <- function(data,output,token="words", ...){
  d %>% 
    select(txt) %>% 
    tidytext::unnest_tokens(output, input="txt", token = token, ...) %>% 
    n_distinct()
}

d <- tibble(txt = prideprejudice)

count_tokens(d, "word", to_lower = FALSE)
#> [1] 6915

count_tokens(d, "ngram", token = "ngrams", to_lower = FALSE, n = 8)
#> [1] 122189

count_tokens(d, "ngram", token = "ngrams", to_lower = FALSE, n = 5)
#> [1] 121599

count_tokens(d, "ngram", token = "ngrams", to_lower = FALSE, n = 3)
#> [1] 104664

reprex package (v0.3.0)

创建于 2021-02-03