我遇到了这个名为
的奇妙功能在{base}
之内
我现在经常使用它而不是大肆宣传
mutate {dplyr}
我的问题是,为什么在()中使用< - 而不是通常的 = 这样的特殊格式?对于args;除了在我发现的这篇精彩文章中给出的内容之外,它与 mutate 有何不同?我很想知道潜在的机制。 Article of Bob Munchen - 2013
答案 0 :(得分:2)
函数within
将表达式作为第二个参数。该表达式本质上是一个代码块,最好包含在大括号{}
中。
在此代码块中,您可以分配新变量,更改值等。变量可以在代码块中用作对象。
另一方面, mutate
为变异提供了一组参数。这些参数必须以应该创建的变量命名,并将该变量的值作为值。
所以:
mutate(iris, ratio = Sepal.Length/Petal.Length)
# and
within(iris, {ratio = Sepal.Length/Petal.Length})
给出相同的结果。删除大括号时会出现问题:
> within(iris, ratio = Sepal.Length/Petal.Length)
Error in eval(substitute(expr), e) : argument is missing, with no default
大括号括起一个表达式(一段代码),因此within()
正常工作。如果你不使用{}
,则R语义将最后一个命令读作"用within
作为第一个参数调用函数iris
,第二个参数调用{ {1}}设置为ratio
"。由于函数Sepal.Length/Petal.Length
没有参数within()
,因此忽略该参数。相反,ratio
查找应该是第二个参数的表达式。但它无法找到那个,所以这就解释了错误。
所以它有点奇怪。这两个函数只有不同的参数。所有其余的几乎就是R如何处理论证。
答案 1 :(得分:1)
within
的参数未分配<-
,但通常为=
。
让我们看一下你链接中的第一个例子:
mydata.new <- within(mydata, {
+ x2 <- x ^ 2
+ x3 <- x2 + 100
+ } )
在这里,
{
x2 <- x ^ 2
x3 <- x2 + 100
}
只是函数的一个参数(R expression
)。 x2
和x3
也不是within
的参数。可以通过这种方式调用该函数,以使其更清晰:
mydata.new <- within(data = mydata, expr = {
x2 <- x ^ 2
x3 <- x2 + 100
})