English · PDF 290
(注意,我们这里使用的是 pryr::object_size(),而不是内置的 object.size()。object.size() 只能接受单个对象,因此无法计算数据在多个对象之间的共享情况。)
我们不必在每一步都创建中间对象,而是可以覆盖原始对象:
foo_foo <- hop(foo_foo, through = forest) foo_foo <- scoop(foo_foo, up = field_mice) foo_foo <- bop(foo_foo, on = head)
这样输入更少(思考也更少),因此你更不容易犯错。然而,这存在两个问题:
另一种方法是放弃赋值,直接将函数调用串联起来:
bop( scoop( hop(foo_foo, through = forest), up = field_mice ), on = head )
这里的缺点是你必须由内而外、从右到左地阅读,而且参数最终分散在相距很远的地方(形象地称为 达格伍德三明治 问题)。简而言之,这段代码对人类来说很难阅读。
最后,我们可以使用管道:
foo_foo %>% hop(through = forest) %>% scoop(up = field_mouse) %>% bop(on = head)