【发布时间】:2016-09-20 21:01:54
【问题描述】:
这与data.table objects not printed after returned from function 有关,但不是骗子。这个问题是专门寻找一种在repl处使用赋值:=data.table行时不抑制输出的方法。因此,在 eval 会导致 R 调用 print 方法的情况下。
我已经升级并注意到:= 现在隐形返回。当我使用交互式工作流程进行开发时,这会在我构建管道时中断流程,添加分配 := 行,然后期望看到结果用作添加额外步骤的上下文。
当然我可以将[] 添加到分配行中,但这是在我意识到我的分配行没有打印之后(因为我之前没有这样做),所以我的流程在添加之前被打乱了这。或者,有人可能会争辩说,我应该始终在每条分配行中添加[],这样我的流程就不会中断,但是我必须记住只对分配行这样做,因为管道通常将分配与过滤器混合在一起,在实践中,这会引入额外的认知开销,最终用户会觉得这是不必要的,并且在管道中逐行执行时看起来不一致。
我宁愿不争论选择隐形返回,因为我认为这已经被彻底讨论过,并且已经为大多数人和用例做出了正确的决定。相反,有没有我可以设置的选项或解决方法让:= 不会隐形返回?
【问题讨论】:
-
您是从哪个版本升级的?
:=已经隐形回归很多年了。在末尾添加[]是我所知道的最简单的选项。 -
@Eddie 1.9.6 到 1.9.6 :)。我还升级了 R、vim、vim-r、tmux,而且我在一台新机器上。因此,我之前的设置实际上允许这种行为在 1.9.6 中持续存在。我认为,由于这是对 data.table 所做的更改,因此该问题可能与“升级”的其他人有关。与此同时,我正在系统地尝试查看我的设置发生了什么变化,以便我可以从中获得灵感来解决问题。
-
澄清@eddi 的评论,以防您不太明白。您无需使用
[]添加新行。您只需将其附加到相同的命令,如dt[, col := x][] -
我认为您需要添加一个 MRE 来准确说明“扰乱流程”的含义。我发现很难理解使用
[]会破坏哪些案例
标签: r data.table