簡體   English   中英

在封閉內使用magrittr管道

[英]use magrittr pipe within closures

1讓我們看一下這個例子:

1:3 %>% rep(.,2) + 1 %>% sum  #[1] 2 3 4 2 3 4

[2] R正在做的是:

1:3 %>% rep(.,2) + (1 %>% sum)

[3]我想要R做的是:(這給出了一個錯誤),我喜歡在那里得到18

1:3 %>% (rep(.,2) + 1) %>% sum  #Error in rep(., 2) : attempt to replicate an object of type 'closure'

[4]所以我需要超級跛腳:

tmp <- 1:3 %>% rep(.,2) + 1
tmp %>% sum #[1] 18

我如何解決[3]工作。 有人可以解釋我的錯誤信息嗎?

編輯

這里開始

請注意,%>%左側的變量x將作為右側函數中的第一個參數應用。 可以使用更改此默認行為。 這被稱為占位符。

但是,要記住的一件重要事情是。 在嵌套表達式中出現,仍然應用第一個參數規則。 但是使用花括號{}可以抑制此行為

有趣的是,我不知道的是:

這是平等的:

1:3 %>% sum(rep(.,3))   #[1] 24
1:3 %>% sum(.,rep(.,3)) #[1] 24

這兩者是平等的:

1:3 %>% {sum(rep(.,3))}  #[1] 18
1:3 %>% rep(.,3) %>% sum #[1] 18 

EDIT2

> packageVersion("magrittr")
[1] ‘1.5’

這個:

?'%>%'

給:(我不知道我的%>%運算符背后是什么包,我不太喜歡說實話)

在以下包中找到有關主題'%>%'的幫助:

管道操作員(在庫C:/ Program Files / R / R-3.3.2 /庫中的包tidyr)magrittr forward-pipe操作符(在庫C:/ Program Files / R / R-3.3.2 /庫中的包magrittr中) )管道運算符(在庫C中的包stringr中:/ Program Files / R / R-3.3.2 / library)從其他包導出的對象(在庫C的包dplyr中:/ Program Files / R / R-3.3.2 /圖書館)

二元運算符+正在創建問題。 它的優先級低於管道(參見?Syntax )。 在匯總到sum之前將整個操作括在括號中,或者使用+的函數形式:

(1:3 %>% rep(.,2) + 1) %>% sum
[1] 18

1:3 %>% rep(.,2) %>% `+`(1) %>% sum
[1] 18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM