我收到此错误:
错误:“else”中出现意外的“else”
从此
if, else
声明:
if (dsnt<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) }
else {
if (dst<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) }
else {
t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE) } }
这有什么问题吗?
您需要重新排列大括号。您的第一个语句已完成,因此 R 会按原样解释它并在其他行上产生语法错误。您的代码应如下所示:
if (dsnt<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else if (dst<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else {
t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
}
更简单地说,如果您有:
if(condition == TRUE) x <- TRUE
else x <- FALSE
然后 R 读取第一行,因为它是完整的,所以完整地运行它。当它到达下一行时,它会变成“Else?Else What?”因为这是一个全新的声明。要让 R 将 else 解释为前面 if 语句的一部分,您必须使用大括号来告诉 R 您尚未完成:
if(condition == TRUE) {x <- TRUE
} else {x <- FALSE}
我建议阅读一些语法。 看这里。
if (dsnt<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else if (dst<0.05) {
wilcox.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
} else
t.test(distance[result=='nt'],distance[result=='t'],alternative=c("two.sided"),paired=TRUE)
我不喜欢大括号(我猜Python编程太多了)。我的解决方案就像简单的
if else
if(condition == TRUE) {x <- TRUE
} else {x <- FALSE}
是
if(condition == TRUE)
x <- TRUE
else
x <- FALSE
够清楚了。
我只是想补充一点,如果 if-else 子句由于某些原因位于 for 循环内,则不会发生这种情况。在 if 大括号和 else 之间可以有任意数量的空行。我理解这个解释,但我发现 R 不只是认为“哦,我认为该陈述是完整的,但由于下一个是“其他”,我想它不是”,这非常愚蠢,特别是因为这显然是它在for 循环。所以基本上我不能在每种情况下都按照我喜欢的方式设计代码,并且必须根据它是否在 for 循环中进行更改。