我注意到,在某些情况下(我仍然是R!的初学者),多行指令不能"按原样"合并到简单的行指令中.让我们举一个例子,这是我最近上线的一课:
> make.power <- function(n) {
+ pow <- function(x) {
+ x^n
+ }
+ pow
+ }
Run Code Online (Sandbox Code Playgroud)
是'make.power'函数的定义.然后我可以定义'立方体'或方形函数
> cube <- make.power(3)
> square <- make.power(2)
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试使用完全相同的语法在一行上定义make.power:
> make.power <- function(n) { pow <- function(x) { x^n } pow }
Run Code Online (Sandbox Code Playgroud)
这将引发"make.power中的意外符号...".这就是说,以下单行代码将起作用:
> make.power <- function(n) { pow <- function(x) { x^n }}
Run Code Online (Sandbox Code Playgroud)
并且,当切换到多线时,仍然可以工作!
> make.power <- function(n) {
+ pow <- function(x) {
+ x^n
+ }
+ }
Run Code Online (Sandbox Code Playgroud)
我必须承认我很困惑.我的问题如下:
编辑:在#Dwin回答之后,以下表达式确实如此:
> make.power <- function(n) { pow <- function(x) { x^n }; pow }
Run Code Online (Sandbox Code Playgroud)
工作得很好.这个也是如此:
> make.power <- function(n){; pow <- function(x) {; x^n }; pow }
Run Code Online (Sandbox Code Playgroud)
所以似乎是";" 在某些情况下(这里,在"}"和第二个"pow"之间可能是强制性的,而在其他情况下(在'{'和第一个'pow'之间)不是强制性的?
回车(或换行)分隔命令.(我之前说它将'表达'分开但在R中并不是真正合适的术语."R语义中的表达式实际上是用逗号分隔的."如果你在一行中插入一个分号,你会得到相同的影响.尽管存在不必要的代码,但这仍然可以作为这个事实的一个例子:
make.power <- function(n) { pow <- function(x) { x^n }; pow }
Run Code Online (Sandbox Code Playgroud)
我很失望,因为在help()我查看的任何文件中都找不到这样的说法.我认为通过打字?Syntax我应该找到相关的东西.我能想到的最好的是help(parse)页面,即使在那里,只有通过查看示例,您才能够推断出这一点.我猜你应该读过"R简介",我有理由相信它必须被描述.是的,它出现在1.8节.
响应你的Q2:在使用内部函数(...)的"< - "赋值给"pow"的过程中,返回到外部函数调用的值只是未命名的函数而不是任何具有名称的函数"战俘".这是我对你的第一条评论的评论.这可能比你从"Intro to R"所预期的更为微妙.return当只分配一个对象的一部分是最后一个命令时,有时需要该函数,但在这种情况下,最紧凑的代码应该是:
make.power <- function(n) { function(x) { x^n } }
Run Code Online (Sandbox Code Playgroud)