R ()中函数的特殊语法

R ()中函数的特殊语法,r,syntax,R,Syntax,我遇到了一个奇妙的函数,叫做 在{base}内 我现在使用它的频率比大肆宣传的要高 突变{dplyr} 我的问题是,为什么in()有这样一种特殊的格式,使用赋值运算符在中的参数没有赋值,中的函数将表达式作为第二个参数。该表达式本质上是一个代码块,最好包含在花括号{}中 在这个代码块中,您可以分配新变量、更改值等。变量可以作为对象在代码块中使用 mutate另一方面,接受一组用于突变的参数。这些参数必须以应创建的变量命名,并获取该变量的值作为值 因此: 给出相同的结果。移除花括号时,问题开始出现:

我遇到了一个奇妙的函数,叫做

在{base}内

我现在使用它的频率比大肆宣传的要高

突变{dplyr}


我的问题是,为什么in()有这样一种特殊的格式,使用赋值运算符
的参数没有赋值
中的函数
将表达式作为第二个参数。该表达式本质上是一个代码块,最好包含在花括号
{}

在这个代码块中,您可以分配新变量、更改值等。变量可以作为对象在代码块中使用

mutate
另一方面,接受一组用于突变的参数。这些参数必须以应创建的变量命名,并获取该变量的值作为值

因此:

给出相同的结果。移除花括号时,问题开始出现:

> within(iris, ratio = Sepal.Length/Petal.Length)
Error in eval(substitute(expr), e) : argument is missing, with no default
花括号中包含一个表达式(一段代码),因此
in()
工作正常。如果不使用
{}
,那么R语义将最后一个命令读取为“调用
中的函数
,其中
iris
作为第一个参数,第二个参数
ratio
设置为
Sepal.Length/Petal.Length
”。由于函数
in()
没有参数
ratio
,因此忽略该参数。相反,
中的
查找应作为第二个参数的表达式。但是它找不到那个,所以这就解释了错误


所以这有点奇怪。两个函数都有不同的参数。其余的都是R如何处理参数。

intra()中的
语法
只适用于其他函数。但是您只有一个表达式要计算,如果您想做更多的工作,那么您必须形成这个表达式:
{…}
。我想你最好比较一下
mutate()
transform()
。明白了。谢谢,@Pop的快速澄清。加1。另外,我仍然没有足够的声望点数来提高你的投票率,但当我拥有它们时,我会这样做。你是对的。我修改了它。这是因为
r_表达式
是在运行第一行时计算的,而不是在
函数内的
中…奇妙的例子@Joris。。。在上面的两个答案中,我得到了一切。附言:我是新来的堆栈溢出,因此不能投票给你(尚未)。顺便说一句,为什么我在前面加@时,你的名字不会出现在屏幕上?
{
 x2 <- x  ^ 2
 x3 <- x2 + 100
}
mydata.new <- within(data = mydata, expr = {
            x2 <- x  ^ 2
            x3 <- x2 + 100
            })
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