()中函数的特殊语法

时间:2017-05-24 14:22:31

标签: r syntax

我遇到了这个名为

的奇妙功能
  

在{base}

之内

我现在经常使用它而不是大肆宣传

  

mutate {dplyr}

我的问题是,为什么在()中使用< - 而不是通常的 = 这样的特殊格式?对于args;除了在我发现的这篇精彩文章中给出的内容之外,它与 mutate 有何不同?我很想知道潜在的机制。 Article of Bob Munchen - 2013

2 个答案:

答案 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)。 x2x3也不是within的参数。可以通过这种方式调用该函数,以使其更清晰:

mydata.new <- within(data = mydata, expr = {
            x2 <- x  ^ 2
            x3 <- x2 + 100
            })