R控制台:单行指令与多行指令

时间:2013-01-13 21:26:12

标签: r rgui

我注意到,在某些情况下(我仍然是R!的初学者),多行指令不能“按原样”合并到简单的行指令中。让我们举一个例子,这是我最近上线的一课:

> make.power <- function(n) {
+     pow <- function(x) {
+         x^n
+         }
+         pow
+     }

是'make.power'函数的定义。然后我可以定义'立方体'或方形函数

> cube <- make.power(3)
> square <- make.power(2)

然后,如果我尝试使用完全相同的语法在一行上定义make.power:

> make.power <- function(n) { pow <- function(x) { x^n } pow }

这会在make.power中产生一个“意外的符号......”。这就是说,以下单行代码可以工作:

> make.power <- function(n) { pow <- function(x) { x^n }}

并且,当切换到多行时,仍然可以工作!

> make.power <- function(n) {
+     pow <- function(x) {
+         x^n
+         }
+     }

我必须承认我很困惑。我的问题如下:

  1. 为什么我不能在单行指令中合并多行代码?
  2. 在函数的第一个多行定义中,为什么要一个 在定义函数后立即调用'pow'函数 显然没有兴趣,因为相同的代码没有回忆 没问题!
  3. 编辑:在#Dwin回答之后,确实存在以下表达式:

    > make.power <- function(n) { pow <- function(x) { x^n }; pow }
    

    完美无缺。这个也是如此:

    > make.power <- function(n){; pow <- function(x) {; x^n }; pow }
    

    所以似乎“;”在某些情况下(在这里,在“}”和第二个“pow”之间可能是强制性的,而在其他情况下(在“{”和第一个“pow”之间)可能是强制性的吗?

1 个答案:

答案 0 :(得分:8)

回车符(或换行符)分隔命令。 (我之前说它将'表达'分开但在R中并不是真正合适的术语。“R语义中的表达式实际上是用逗号分隔的。”如果你在一行中插入一个分号,你会得到相同的影响。尽管存在不必要的代码,但这仍然可以作为这个事实的一个例子:

make.power <- function(n) { pow <- function(x) { x^n }; pow }

我感到很失望的是,在我看过的任何help()文件中都找不到这样的说法。我认为通过输入?Syntax我应该找到相关的东西。我能想到的最好的是help(parse)页面,即使在那里,只有通过查看示例,您才能够推断出这一点。我猜你应该读过“R简介”,我有理由相信它必须被描述。是的,它出现在第1.8节。

响应你的Q2:在使用内部函数(...)的“&lt; - ”赋值给“pow”的过程中,返回到外部函数调用的值只是未命名的函数而不是任何东西这个名字叫“pow”。这是我对你的第一条评论的评论。这可能比你从“Intro to R”所预期的更为微妙。当只分配一个对象的一部分是最后一个命令时,有时需要return函数,但在这种情况下,最紧凑的代码应该是:

make.power <- function(n) { function(x) { x^n } }