阅读这个优秀的帖子我遇到了within和transform.
阅读这两个帮助文件我不幸的是没有完全理解差异是什么......
我尝试过类似的东西:
df <- data.frame(A = runif(5), B = rnorm(5))
A=1:5
within(df, C<-A+B)
transform(df,C=A+B)
Run Code Online (Sandbox Code Playgroud)
两次输出都是:
A B C
1 0.2326266 1.3237210 1.5563476
2 0.4581693 -0.2605674 0.1976018
3 0.6431078 0.5920021 1.2351099
4 0.9682578 1.1964012 2.1646590
5 0.9889942 0.5468008 1.5357950
Run Code Online (Sandbox Code Playgroud)
所以两者似乎都在创造一种新的环境,因为他们A=1:5在评估中忽略了这一点.
提前致谢!
G. *_*eck 14
within允许您稍后使用之前定义的变量,但不能transform:
within(BOD, { a <- demand; b <- a }) # ok
transform(BOD, a = demand, b = a) # error
Run Code Online (Sandbox Code Playgroud)
请注意,我已经定义了一个变体,transform它的行为更像within是几年前在这里被调用的地方my.transform.使用它我们可以像这样写上面的内容:
my.transform(BOD, a = demand, b = a) # ok
Run Code Online (Sandbox Code Playgroud)
在上面的例子within(或my.transform)会更好,但在以下transform更好:
transform(BOD, Time = demand, demand = Time) # swap columns
within(BOD, { Time <- demand; demand <- Time }) # oops
Run Code Online (Sandbox Code Playgroud)
(要执行交换,within需要我们定义一个临时的.)
my.transform现在在gsubfn CRAN包中调用它transform2. mutate在dplyr从左到右工作.
需要注意的是transform,transform2和mutate每个运作方式略有不同.RHS transform论证都涉及原始值.mutate参数的RHS 指的是最近的从左到右的值. transform2找出依赖关系并使用它们,以便依赖关系可以在它使用的参数之前或之后出现.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |