ฉันได้เห็นการใช้งานของ%>%
(สูงกว่าร้อยละร้อยละ) ฟังก์ชั่นในแพคเกจบางอย่างเช่นdplyrและrvest หมายความว่าอย่างไร? เป็นวิธีเขียนปิดบล็อคใน R หรือไม่?
library(magrittr)
หรือlibrary(dplyr)
ก่อนแล้วจึงเรียกใช้?'%>%'
แม้ว่าลิงก์ของฉันจะให้ข้อมูลเพิ่มเติม
ฉันได้เห็นการใช้งานของ%>%
(สูงกว่าร้อยละร้อยละ) ฟังก์ชั่นในแพคเกจบางอย่างเช่นdplyrและrvest หมายความว่าอย่างไร? เป็นวิธีเขียนปิดบล็อคใน R หรือไม่?
library(magrittr)
หรือlibrary(dplyr)
ก่อนแล้วจึงเรียกใช้?'%>%'
แม้ว่าลิงก์ของฉันจะให้ข้อมูลเพิ่มเติม
คำตอบ:
%>%
ไม่มีความหมายในตัว แต่ผู้ใช้ (หรือแพ็คเกจ) มีอิสระที่จะกำหนดตัวดำเนินการของแบบฟอร์ม%whatever%
ในแบบที่ต้องการ ตัวอย่างเช่นฟังก์ชันนี้จะส่งคืนสตริงที่ประกอบด้วยอาร์กิวเมนต์ด้านซ้ายตามด้วยเครื่องหมายจุลภาคและช่องว่างจากนั้นจึงเป็นอาร์กิวเมนต์ที่ถูกต้อง
"%,%" <- function(x, y) paste0(x, ", ", y)
# test run
"Hello" %,% "World"
## [1] "Hello, World"
ฐานของ R จัดเตรียม%*%
(matrix mulitiplication), %/%
(การหารจำนวนเต็ม), %in%
(lhs เป็นส่วนประกอบของ rhs หรือไม่), %o%
(ผลิตภัณฑ์ด้านนอก) และ%x%
(ผลิตภัณฑ์โครเนกเกอร์) ไม่ชัดเจนว่า%%
อยู่ในหมวดหมู่นี้หรือไม่ แต่แสดงถึงโมดูโล
expm แพคเกจการ R, expm %^%
กำหนดผู้ประกอบการพลังงานเมทริกซ์ ตัวอย่างเช่นเห็นอำนาจเมทริกซ์ในการวิจัย
ตัวดำเนินการแพ็คเกจ R ได้กำหนดตัวดำเนินการดังกล่าวไว้เป็นจำนวนมากเช่น%!in%
(for not %in%
) ดูhttp://cran.r-project.org/web/packages/operators/operators.pdf
magrittrในกรณีของ%>%
แพ็คเกจ magrittr R ได้กำหนดไว้ตามที่กล่าวไว้ในบทความสั้น ๆ ของ magrittr ดูhttp://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html
magittr ได้กำหนดตัวดำเนินการอื่น ๆ ไว้ด้วยเช่นกัน ดูเพิ่มเติมส่วนท่อประกอบการของการเชื่อมโยงก่อนซึ่งกล่าวถึง%T>%
, %<>%
และ%$%
และhttp://cran.r-project.org/web/packages/magrittr/magrittr.pdfสำหรับรายละเอียดมากยิ่งขึ้น
dplyrแพ็กเกจ dplyr R ใช้เพื่อกำหนดตัว%.%
ดำเนินการที่คล้ายกัน อย่างไรก็ตามได้เลิกใช้งานแล้วและตอนนี้ dplyr แนะนำให้ผู้ใช้ใช้%>%
ซึ่งการนำเข้า dplyr จาก magrittr และทำให้ผู้ใช้ dplyr สามารถใช้ได้ ดังที่ David Arenburg ได้กล่าวไว้ในความคิดเห็นคำถาม SO นี้กล่าวถึงความแตกต่างระหว่างมันกับ magrittr %>%
: ความแตกต่างระหว่าง%.% (dplyr) และ%>% (magrittr)
pipeRแพ็กเกจ R pipeR กำหนดตัว%>>%
ดำเนินการที่คล้ายกับ%>% ของ magrittr และสามารถใช้เป็นทางเลือกอื่นได้ ดูhttp://renkun.me/pipeR-tutorial/
แพ็คเกจ pipeR ยังกำหนดตัวดำเนินการอื่น ๆ อีกจำนวนหนึ่งด้วย ดู: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf
postlogicแพ็กเกจ postlogic กำหนด%if%
และ%unless%
ตัวดำเนินการ
wraprแพ็กเกจ R, wrapr, กำหนด dot ไปป์%.>%
ที่เป็นเวอร์ชันที่ชัดเจน%>%
ซึ่งไม่ได้ทำการแทรกอาร์กิวเมนต์โดยนัย แต่จะใช้แทนการใช้จุดอย่างชัดเจนทางด้านขวามือเท่านั้น ซึ่งถือได้ว่าเป็นอีกทางเลือกหนึ่ง%>%
ของ ดูhttps://winvector.github.io/wrapr/articles/dot_pipe.html
ท่อ Bizarro นี่ไม่ใช่ท่อจริง ๆ แต่เป็นไวยากรณ์พื้นฐานที่ชาญฉลาดในการทำงานในลักษณะที่คล้ายกับท่อโดยไม่ต้องใช้ท่อจริงๆ มีการพูดคุยกันในhttp://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ แนวคิดคือแทนที่จะเขียน:
1:8 %>% sum %>% sqrt
## [1] 6
หนึ่งเขียนต่อไปนี้ ในกรณีนี้เราจะใช้ dot อย่างชัดเจนแทนที่จะใช้การหลีกเลี่ยงอาร์กิวเมนต์ dot และสิ้นสุดแต่ละองค์ประกอบของไปป์ไลน์ด้วยการกำหนดให้กับตัวแปรที่มีชื่อเป็น dot ( .
) เราตามด้วยอัฒภาค
1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6
อัปเดตข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจ expm และตัวอย่างที่เรียบง่ายที่ด้านบน เพิ่มแพ็คเกจ postlogic
?"%<>%"
ฯลฯ
ความเข้าใจของฉันหลังจากอ่านลิงค์ที่นำเสนอโดย G.Grothendieckคือ%>% เป็นตัวดำเนินการที่ไปป์ทำหน้าที่ สิ่งนี้ช่วยให้สามารถอ่านและเพิ่มผลผลิตได้เนื่องจากง่ายต่อการติดตามการไหลของฟังก์ชันต่างๆผ่านไปป์เหล่านี้มากกว่าการย้อนกลับเมื่อมีหลายฟังก์ชันซ้อนกัน
%>%
คล้ายกับท่อใน Unix ตัวอย่างเช่นใน
a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()
การส่งออกของcombined_data_set
จะเข้าไปgroup_by
และเอาท์พุทจะเข้าไปแล้วผลสุดท้ายได้รับมอบหมายให้tally
a
นี่เป็นวิธีที่สะดวกและสะดวกในการใช้ฟังก์ชันแบบอนุกรมโดยไม่ต้องสร้างตัวแปรและเก็บค่ากลาง
แพ็กเกจ R dplyr และ sf นำเข้าตัวดำเนินการ%>% จากแพ็กเกจ R magrittr
วิธีใช้สามารถใช้ได้โดยใช้คำสั่งต่อไปนี้:
?'%>%'
แน่นอนว่าต้องโหลดแพ็คเกจก่อนโดยใช้เช่น
library(sf)
เอกสารประกอบของตัวดำเนินการไปข้างหน้า magrittr เป็นตัวอย่างที่ดี: เมื่อฟังก์ชันต้องการอาร์กิวเมนต์เดียว x%>% f จะเทียบเท่ากับ f (x)
?'%>%'