【问题标题】:What is the difference between `transform` and `within``transform` 和 `within` 有什么区别
【发布时间】:2014-03-14 23:39:53
【问题描述】:

阅读this 我遇到了withintransform 的优秀帖子。

不幸的是,我阅读了这两个帮助文件并没有完全理解它们的区别是什么......

我尝试了类似的方法:

df <- data.frame(A = runif(5), B = rnorm(5))
A=1:5
within(df, C<-A+B)
transform(df,C=A+B)

两次输出都是:

          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

因此,两者似乎都在创建一个新环境,因为他们在评估中忽略了A=1:5

提前致谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    within 允许您稍后使用较早定义的变量,但不能使用transform

    within(BOD, { a <- demand; b <- a }) # ok
    transform(BOD, a = demand, b = a) # error
    

    请注意,我已经定义了 transform 的一个变体,它的行为更像是几年前的 within here,它被称为 my.transform。使用它,我们可以像这样编写上面的代码:

    my.transform(BOD, a = demand, b = a) # ok
    

    在上面的例子中within(或my.transform)会更好,但下面的transform更好:

    transform(BOD, Time = demand, demand = Time) # swap columns
    within(BOD, { Time <- demand; demand <- Time }) # oops
    

    (要使用within 执行交换需要我们定义一个临时的。)

    编辑

    my.transform 现在位于 gsubfn CRAN 包中,名为 transform2 。 dplyr 中的mutate 从左到右工作。

    请注意,transformtransform2mutate 的工作方式略有不同。 RHS transform 参数均指原始值。 mutate 参数的 RHS 指的是最近的从左到右的值。 transform2 找出依赖关系并使用它们,以便依赖关系可以出现在它使用的参数之前或之后。

    【讨论】:

    • 所以,如果withintransform 更强大(并且同样易于使用),并且它们各自的帮助页面表明transform 用于交互式会话,而within 出现没有这样的限制,使用transform有什么好处?
    • 我几乎从不使用within,并且经常使用transform,因此transform 确实更适合最常见的用法。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2014-02-27
    • 2014-07-13
    • 1970-01-01
    • 2015-11-17
    • 2016-12-06
    相关资源
    最近更新 更多