#r #pipe #magrittr
Вопрос:
Мне нужно сохранить версии сводных таблиц latex и word. Есть ли оператор трубопровода, который может разделить вход на два выхода? В идеале я хотел бы что-то, что будет species_tab
одновременно принимать и сохранять в latex и word.
library(datasets) library(flextable) library(gt) species_tab lt;- iris %gt;% tabyl(Species) species_tab %gt;% gt() %gt;% gtsave(filename = "species.tex") species_tab %gt;% flextable() %gt;% save_as_docx(path = "species.docx")
Ответ №1:
Один из вариантов-обернуть с {}
library(datasets) library(flextable) library(gt) iris %gt;% tabyl(Species) %gt;% {. %gt;% gt() %gt;% gtsave(filename = "species.tex") . %gt;% flextable() %gt;% save_as_docx(path = "species.docx") }
Комментарии:
1. Можете ли вы позже добавить, как работают {} и точки?
2. @ibm Документация для
help("%gt;%")
говорит... The reason for this is that in most use-cases this produces the most readable code. For example, iris %gt;% subset(1:nrow(.) %% 2 == 0) is equivalent to iris %gt;% subset(., 1:nrow(.) %% 2 == 0) but slightly more compact. It is possible to overrule this behavior by enclosing the rhs in braces. For example, 1:10 %gt;% {c(min(.), max(.))} is equivalent to c(min(1:10), max(1:10))
Ответ №2:
Вы можете использовать %Tgt;%
оператор из magrittr
, который используется, когда вы хотите вернуть lhs
оператор, а не вывод rhs
. Однако это грязно и не совсем подходит для оператора, поэтому подойдет решение @akrun. Но есть случаи, когда вам не нужно использовать { }
, и оператор тройника предпочтительнее обычной трубы.
library(magrittr) species_tab %Tgt;% { gtsave(data = gt(.), filename = "species.tex")} %gt;% flextable() %gt;% save_as_docx(path = "species.docx")
Комментарии:
1. Это сработало для меня, но только после того, как я удалил
flextable()%gt;%
. Кажется, я не могу редактировать (предложенная очередь редактирования заполнена), а вы? Я все равно отмечу как правильный, так как этот комментарий будет опубликован