我正在处理一个Rmarkdown文档,被告知要严格限制最大列数(margin column)为100。在文档的代码块中,我使用了许多不同的包,其中包括data.table
。
为了遵守限制,我可以拆分链(甚至长命令),如:
p <- ggplot(foo,aes(bar,foo2))+
geom_line()+
stat_smooth()
bar <- sum(long_variable_name_here,
na.rm=TRUE)
foo <- bar %>%
group_by(var) %>%
summarize(var2=sum(foo2))
但是我不能拆分data.table
链,因为它会产生错误。我怎样才能达到这样的目的呢?
bar <- foo[,.(long_name_here=sum(foo2)),by=var]
[order(-long_name_here)]
当然,最后一行会导致错误。谢谢!
3条答案
按热度按时间pokxtpni1#
使用maggritr链接数据表
我有一个方法,我使用magrittr,使用
.
对象和[
:实施例:
其他示例
编辑:它也不仅仅是语法糖,因为它允许您将上一步中的表引用为
.
,这意味着您可以进行自连接,或者你也可以使用
%T>%
来做一些中间的日志记录(使用futility.logger等):编辑:
这是很晚了,我仍然经常使用它。但我有以下警告:
magritr增加了开销
我真的很喜欢在剧本的顶层做这个。它有一个非常清晰和可读的流程,有许多巧妙的技巧你可以用它做。
但是我以前在优化时,如果它是一个被调用了很多次的函数的一部分,我就不得不删除它。
在这种情况下,最好将数据表the old fashioned way链接起来。
**编辑2:**好吧,我回到这里说它不会增加太多开销,我只是在一些测试中尝试了基准测试,但无法真正找到任何重大差异:
8i9zcol22#
您必须给予每行的
[
和]
之间返回。下面是一个将 data.table 代码分成几行的例子:您也可以给予每个逗号之前/之后返回。一个逗号前有回车符的例子(我的首选):
请参阅下面的答案,以获得一个扩展示例
t1rydlwq3#
多年来,RStudio中自动缩进导致数据表管道不对齐的方式一直令我感到沮丧。直到最近,我才意识到有一种巧妙的方法可以解决这个问题,只需将管道操作包含在括号中即可。
下面是一个简单的例子:
为什么会这样?因为未闭括号向R解释器发出信号,表示当前行尚未完成,因此整个管道被视为连续的代码行。