使用先前 magrittr 链的输出作为进一步参数的参数

use output of previous magrittr chains as arguments to further arguments

如果我有下面的例子:

library(text2vec)
library(magrittr)

reviews <- movie_review[1:10,]

vocabInsomnia <- reviews$review %>% itoken(tolower, word_tokenizer, n_chunks = 10) %>%
    create_vocabulary %>%
    prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.5) %>%
    vocab_vectorizer %>%
    create_dtm(<output_from_itoken>,<output_from_vocab_vectorizer>)

您可以看到,在最后一个链序列中,我想使用前面两个步骤的输出作为 create_dtm 函数的参数。我只知道如何直接输入链之前的输出,即 vocab_vectorizer 的输出,但不知道序列中第一个链的函数 itoken 的输出。 magrittr 允许这样做吗?

我不知道是否有更清洁或更有效的方法来执行此操作,但在这种情况下我通常做的是将管道嵌套在最高级别,我需要从中提取输入并通过管道输入使用 . 继续链的输出。

library(text2vec)
library(magrittr)

reviews <- movie_review[1:10,]

vocabInsomnia <- reviews$review %>% 
  itoken(tolower, word_tokenizer, n_chunks = 10) %>%
  create_dtm(., create_vocabulary(.) %>%
               prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.5) %>%
               vocab_vectorizer())
  
vocabInsomnia
#> 10 x 6 sparse Matrix of class "dgCMatrix"
#>    an so by are he br
#> 1   2  4  .   2  9  8
#> 2   .  1  1   .  .  .
#> 3   1  .  6   7  .  2
#> 4   4  1  3   2  .  4
#> 5   2  .  1   1  .  .
#> 6   .  .  .   .  .  .
#> 7   1  3  .   .  .  .
#> 8   .  1  .   .  2  .
#> 9   .  .  .   .  1  4
#> 10  .  .  .   .  .  2

reprex package (v2.0.1)

于 2022-01-18 创建

我们可以使用 pipeR

创建一个临时对象
library(text2vec)
library(pipeR)
library(magrittr)
reviews$review %>% 
  itoken(tolower, word_tokenizer, n_chunks = 10) %>>%
 (~ tmp) %>%
  create_vocabulary %>% 
  prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.5) %>% 
  vocab_vectorizer %>% 
  create_dtm(tmp, .)

-输出

10 x 6 sparse Matrix of class "dgCMatrix"
   an so by are he br
1   2  4  .   2  9  8
2   .  1  1   .  .  .
3   1  .  6   7  .  2
4   4  1  3   2  .  4
5   2  .  1   1  .  .
6   .  .  .   .  .  .
7   1  3  .   .  .  .
8   .  1  .   .  2  .
9   .  .  .   .  1  4
10  .  .  .   .  .  2