0

I have the following code:

a=2 

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

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

I get the following error:

Error: unexpected 'else' in "    else"

I have no idea why I am getting this message. Any ideas?

4

3 回答 3

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”与函数或任何您想要的东西交换。

于 2013-01-18T16:56:01.197 回答
1

在 R 定义中:

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

R语言定义

所以,'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”功能。

于 2013-01-18T17:13:57.500 回答
1

正如@joran 在评论中指出的那样,要解决您眼前的问题,您只需要将语句的}结尾与.ifelse

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 中,让你的函数返回东西比让它们仅仅改变东西要好得多。另请参阅:为什么使用 `<<-` 不受欢迎,我该如何避免?

于 2013-01-18T17:18:30.923 回答