有没有办法捕获对象上执行的所有操作?
我想将新列添加到iris
并将代码保存到某个地方,这将生成附加版本。
> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
> iris2 = iris
> iris2$IsSetosa = ifelse(iris$Species == "setosa", 1, 0)
> iris2$IsSetosa
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[149] 0 0
> head(iris2)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species IsSetosa
1 5.1 3.5 1.4 0.2 setosa 1
2 4.9 3.0 1.4 0.2 setosa 1
3 4.7 3.2 1.3 0.2 setosa 1
4 4.6 3.1 1.5 0.2 setosa 1
5 5.0 3.6 1.4 0.2 setosa 1
6 5.4 3.9 1.7 0.4 setosa 1
我正在寻找一种捕获和存储ifelse(iris$Species == "setosa", 1, 0)
表达式的方法。因此我可以轻松复制iris2
。换句话说,我正在寻找像对象的版本控制,但以自动方式。因此,应该记录对象上执行的每个更改,并且可以复制。
为了简化问题,我不希望任何依赖于外部对象的更改。这意味着所有更改都基于自己的数据和/或一些提供的常量。
有一个包track
可以进行更改检测并将它们保存到磁盘。我正在寻找code-generator
这样的变化。
dplyr
对tbl
对象使用惰性求值,我假设存储所有表达式,如果需要,将转换为SQL调用。