函数中出现意外的符号(R语言)

时间:2018-06-23 18:51:01

标签: r

我正在尝试《 R编程的艺术》这本书中的以下代码,由于某种原因,我收到了错误消息“错误:“ first1 <-function(x){for(i in 1:length(x)){if(x [i] == 1)break} return“ 这段代码与书中所显示的完全一样(除了我无法将每一行分割成一行)。

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

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

2 个答案:

答案 0 :(得分:0)

在for循环和return命令的情况下,必须用分号分隔各个命令:

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) 
  }

答案 1 :(得分:0)

如果您只是在R控制台上输入了此信息,则不会收到该错误。 R分析器会知道它是一个不完整的表达式,它将为您输入换行符,并表示它正在等待表达式的完成,方法是在屏幕的最左端加上一个加号:

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

您将能够使用以下命令完成命令:

return(i) }

当您点击<enter>时,全局环境中将出现一个名为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)
 }

(我认为Windows R版本中的R-GUI可能接受带有">""+"的文本,并且为了方便起见将它们剥离,但是我的系统不接受。)< / p>