【问题标题】:Unexpected symbol in function (R language)函数中的意外符号(R 语言)
【发布时间】:2018-06-23 18:51:00
【问题描述】:

我正在尝试“R 编程的艺术”一书中的以下代码,由于某种原因,我收到错误消息“错误:“first1

当我删除 return(i) 时,该函数似乎工作正常。

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break} return(i) }

【问题讨论】:

  • 如果你不能添加换行符(为什么不呢?)你必须添加一个分号;而是。
  • 当我使用 , 或 ;并点击输入代码运行而不是开始新行。当我删除 return(i) 时,上面的代码似乎很好
  • a difference between a source file and the console。即使在控制台中,您也可以使用 Shift - Enter 输入换行符

标签: r


【解决方案1】:

分号用于分隔各个命令,在这种情况下是 for 循环和返回命令:

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break}; return(i) }

而是使用结构化的代码形式:

first1 <- function(x) {
  for (i in 1:length(x)) {
    if (x[i] == 1) break
  } 
  return(i) 
  }

【讨论】:

  • 谢谢,分号使函数不会出错。我不知道如何以结构化的形式获得它,但我不会在这上面浪费一个话题。稍后我会弄清楚的。
  • 好吧,为了将代码构造为上面的替代(第二个)选项,你只需按 Enter 键引入一个新行,所以它看起来就像上面的代码(没有双关语)跨度>
  • 您必须添加空格然后输入,并且不能输入右括号( } ),rstudio 会自动这样做。
【解决方案2】:

如果您在 R 控制台中仅输入此内容,您将不会收到错误消息。 R 解析器会知道 htat 它是一个不完整的表达式,它会为您输入换行符,并通过在屏幕最左侧放置一个加号来指示它正在等待表达式完成:

first1 <- function(x) {for (i in 1:length(x)) {if (x[i] == 1) break}
+  # that was displayed by the R interpreter/parser

然后您就可以使用以下命令完成命令:

return(i) }

当你点击&lt;enter&gt; 时,现在全局环境中会出现一个名为first1 的函数。与 R 交互的常用方法是首先在编辑器中构建代码。 R 的 GUI 和 IDE 通常提供这种能力。 Rstudio 是一个特别受欢迎的,但还有其他几个可用。

当我输入多行函数时,控制台上会显示以下内容。

> f_e<-function(){
+     b=2
+     c=2
+     d=eval( (expr_list()$f_a))
+     print(d)
+ }

但是,如果我将其复制并粘贴到解释器中,我会得到一个错误,因为“>”和“+”都不是代码的一部分。它们只是给用户的消息。我需要粘贴:

f_e<-function(){
     b=2
     c=2
     d=eval( (expr_list()$f_a))
     print(d)
 }

(我认为 R 的 Windows 版本中的 R-GUI 可能会接受带有 "&gt;""+" 的文本并将它们剥离为方便,但我的系统不接受。)

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多