在R中的if条件中解释错误消息

时间:2013-01-18 16:53:17

标签: r

我有以下代码:

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) }

else {b<<-sum(c[seq(3,length(x),2)]) }

我收到以下错误:

Error: unexpected 'else' in "    else"

我不知道为什么我收到这条消息。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为你在寻找

ifelse(expr, if-case, else-case)

实际上,似乎你的if正在执行,然后你试着写一个'else'(但没有if)。你是在shell中做这个代码还是用文本文件写的?

编辑(解释):

x <- 1
b <- ifelse(x == 1, 1,2)
cat(b,"\n")
[1] 1

因此,如果x == 1,那么b得到1,否则得到2.你可以用函数或任何你想要的东西交换'1'和'2'。

答案 1 :(得分:1)

在R定义中:

  

当if语句不在块中时,else(如果存在)必须   与statement2的结尾出现在同一行。否则新的   statement2末尾的行完成if并产生a   语法完整的语句,被评估。简单的解决方案   是使用包裹在大括号中的复合语句,将else放在上面   与结束括号相同的行标志着结束   言。

R Language Definition

所以,'else'必须和'}'在同一行。任

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) } else {b<<-sum(c[seq(3,length(x),2)]) }

a=2 

if (length(a)>1){
b<<-rowSums(c[,-(1:2)][,c(T,F)]) 
} else {b<<-sum(c[seq(3,length(x),2)]) }

但仍然是一个糟糕的代码/身份模式。我会尝试像

这样的东西
a=2 

if (length(a)>1) {
    b<<-rowSums(c[,-(1:2)][,c(T,F)]) 
} else {
    b<<-sum(c[seq(3,length(x),2)]) 
}

避免进一步的错误,或建议的'ifelse'功能。

答案 2 :(得分:1)

要解决您的直接问题,正如@joran在评论中指出的那样,您只需要在与}相同的行中if结束else语句。< / p>

a <- FALSE

if (a) {
    print("a is true")
} else {  ## Works
    print("a is false")
}

if (a) {
    print("a is true")
} ## Doesn't work
else {
    print("a is false")
}

当一行结束并且语句可以结束时,R停止期望与该语句相关的更多输入。 这与

的原因相同
1 +
2

给出3,但

1
+ 2

不会。

我还强烈建议您重新考虑<<-。在R中使用你的函数返回东西比用它们改变东西要好得多。另见:Why is using `<<-` frowned upon and how can I avoid it?