我有以下代码:
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"
我不知道为什么我收到这条消息。有什么想法吗?
答案 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放在上面 与结束括号相同的行标志着结束 言。
所以,'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?