ฟังก์ชัน%>% หมายถึงอะไรใน R?


120

ฉันได้เห็นการใช้งานของ%>%(สูงกว่าร้อยละร้อยละ) ฟังก์ชั่นในแพคเกจบางอย่างเช่นdplyrและrvest หมายความว่าอย่างไร? เป็นวิธีเขียนปิดบล็อคใน R หรือไม่?


10
หรือดูที่?'%>%'
jbaums

6
ขอบคุณเดวิด! jbaums น่าเสียดายที่ไม่มีเอกสารเกี่ยวกับเรื่องนี้ ? '%>%' เรียกใช้ซ้ำ "ไม่มีเอกสารสำหรับ"%>% "ในแพ็กเกจและไลบรารีที่ระบุ"
alfakini

6
@ ครึ่งหนึ่ง. คุณต้องlibrary(magrittr)หรือlibrary(dplyr)ก่อนแล้วจึงเรียกใช้?'%>%'แม้ว่าลิงก์ของฉันจะให้ข้อมูลเพิ่มเติม
David Arenburg


1
ที่เกี่ยวข้อง: %>% หมายถึงอะไรใน R
Joshua Ulrich

คำตอบ:


142

% ... % ตัวดำเนินการ

%>%ไม่มีความหมายในตัว แต่ผู้ใช้ (หรือแพ็คเกจ) มีอิสระที่จะกำหนดตัวดำเนินการของแบบฟอร์ม%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


1
ฉันยังเห็น:% <>%,% T>%,% $% พวกเขาทำอะไร rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke

จากภายใน R หลังจากโหลด magrittr ได้รับความช่วยเหลือโดยใช้: ?"%<>%"ฯลฯ
กรัม Grothendieck

17

ความเข้าใจของฉันหลังจากอ่านลิงค์ที่นำเสนอโดย G.Grothendieckคือ%>% เป็นตัวดำเนินการที่ไปป์ทำหน้าที่ สิ่งนี้ช่วยให้สามารถอ่านและเพิ่มผลผลิตได้เนื่องจากง่ายต่อการติดตามการไหลของฟังก์ชันต่างๆผ่านไปป์เหล่านี้มากกว่าการย้อนกลับเมื่อมีหลายฟังก์ชันซ้อนกัน


ข้อดีที่คุณกล่าวถึงจะแสดงให้เห็นด้วยตัวอย่างรหัสที่นี่
Christopher Stephan

9

%>%คล้ายกับท่อใน Unix ตัวอย่างเช่นใน

a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()

การส่งออกของcombined_data_setจะเข้าไปgroup_byและเอาท์พุทจะเข้าไปแล้วผลสุดท้ายได้รับมอบหมายให้tallya

นี่เป็นวิธีที่สะดวกและสะดวกในการใช้ฟังก์ชันแบบอนุกรมโดยไม่ต้องสร้างตัวแปรและเก็บค่ากลาง


-1

แพ็กเกจ R dplyr และ sf นำเข้าตัวดำเนินการ%>% จากแพ็กเกจ R magrittr

วิธีใช้สามารถใช้ได้โดยใช้คำสั่งต่อไปนี้:

?'%>%'

แน่นอนว่าต้องโหลดแพ็คเกจก่อนโดยใช้เช่น

library(sf)

เอกสารประกอบของตัวดำเนินการไปข้างหน้า magrittr เป็นตัวอย่างที่ดี: เมื่อฟังก์ชันต้องการอาร์กิวเมนต์เดียว x%>% f จะเทียบเท่ากับ f (x)


1
ดูเหมือนว่านี้มีอยู่แล้วดีที่อธิบายไว้ในstackoverflow.com/a/27129032/570918
merv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.