我正在尝试《 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) }
答案 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>