r - R中函数的语法?

标签 r syntax

以下两个是否等效,即它们是否定义了相同的函数?

function(df) {lm(mpg ~ wt, data=df)}


function(df) lm(mpg ~ wt, data=df)

特别是,我很困惑为什么可以在 R 中编写没有大括号的函数。

当函数定义超过一行时,是否只需要大括号来定义函数?

(也许是关于 R 和 Python 在技术上如何支持 C 中的分号,但使用它们被认为是不好的做法?)

这似乎可以解释为什么人们在定义匿名函数时通常不使用大括号,因为匿名函数通常很短,因此可以放在一行中,因此大括号不是必需的。

但是是否可以传递定义超过一行的匿名函数(显然这可能是不好的做法,但这不是我的观点)?

如果可能,那是否需要大括号?

最佳答案

您的示例与匿名函数无关。是关于{}如果它们之间只有一个表达式,则不需要。
- 表达式可以长于一行。
- 一行可以有多个表达式(用分号分隔)。
- 匿名函数不限于一行。

您可以找到 { 的文档像往常一样:help('{')
例子:

x <- 3; y <- 4; z <- x + y  # more than one expression on a line

z <- x +
y +
2  # the expression x+y+2 extends over three lines

x <- matrix(1:30,3)
apply(x, 1, function(x) sd(x)/
median(x)) # anonymous function definition on two lines

有时必须小心代码中的换行符。在某些情况下,它们被解释器识别为句法单元的结尾。在这种情况下,“小心”是指:
给解释器一个在下一行搜索的理由 .
这将不起作用:
x <- 11:15
x
[3]  # because of the linebreak it is not x[3]

但这会做:
x[
3
]
# the interpreter was searching for the ']' (till it was found)

这是我吸取教训的情况:
if (...) { ... }
else { ... }     # unexpected 'else' !!!

从那时起,我以这种方式编码:
if (...) {
   ...
} else {
   ...
}

Unexpected 'else' in "else" error

A 非匿名函数 (即命名函数)只不过是通过赋值与对象名连接的函数定义:
fname <- function(...) ...

以备后用。您甚至可以在通常可以找到匿名函数的地方执行此操作:
x <- matrix(1:30,3)
apply(x, 1, FUN=(mysuperfunc <- function(x) sd(x)/median(x)) ) 

但这与更好的可读性相同:
mysuperfunc <- function(x) sd(x)/median(x)
x <- matrix(1:30,3)
apply(x, 1, FUN=mysuperfunc)

关于r - R中函数的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43618786/

相关文章:

r - R:将一个环境复制/移动到另一个环境

r - 使用 dplyr、group_by 和 mutate() 或汇总 () & str_c() 或 paste() & 折叠连接字符串/行,但保持 NA 和所有字符串

python - 对象与类变量

c# - IList.Cast<typeof(T)>() 返回错误,语法看起来没问题

r - 如何从 rmongodb R 包访问 MongoDB 的聚合框架

r - 对齐具有不同 y 标签长度的两个图的 x 轴

r - 如何在 R 和 ggplot2 中的背景图像上拟合绘图

syntax - 为什么我不能在 Groovy 脚本中的 @Grab 声明之后进行方法调用?

c++ - 是否有任何示例表明三重冒号 (:::) 是 C++ 代码中的有效语法?

c++ - "= 0"在 C++ 中是什么意思?