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