2013-02-13 32 views
43

tôi nhận được lỗi này:bất ngờ 'khác' trong "khác" lỗi

Error: unexpected 'else' in " else"

Từ tuyên bố if, else này:

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)  } } 

Điều gì là sai với điều này?

+2

Câu lệnh if của bạn hoàn thành. Di chuyển dấu ngoặc nhọn ở cuối của nó đến đầu dòng thứ 3. Làm tương tự cho ngày 5. –

+1

Có thể trùng lặp của http://stackoverflow.com/questions/13724063/if-else-constructs-inside-and-outside-functions –

Trả lời

6

Tôi khuyên bạn nên đọc một chút về cú pháp. See here.

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) 
+0

Chỉ khi tôi nghĩ rằng tôi nên thêm mã viết lại để được tốt đẹp, tôi nhận ra câu trả lời đã được trả lời bởi sebastian-c .. – nadizan

+1

Xin lỗi về điều đó. Tuy nhiên, tôi đã đánh giá cao liên kết đến định nghĩa ngôn ngữ. Nó trả lời câu hỏi. –

67

Bạn cần sắp xếp lại dấu ngoặc nhọn. Câu lệnh đầu tiên của bạn đã hoàn thành, vì vậy R diễn giải nó như vậy và tạo ra các lỗi cú pháp trên các dòng khác. Mã của bạn sẽ giống như thế:

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)  
} 

Nói một cách đơn giản hơn, nếu bạn có:

if(condition == TRUE) x <- TRUE 
else x <- FALSE 

Sau đó R đọc dòng đầu tiên và vì nó được hoàn tất, chạy mà toàn bộ. Khi nó đến dòng tiếp theo, nó sẽ đi "Khác? Khác gì?" bởi vì nó là một tuyên bố hoàn toàn mới. Để R giải thích cho người khác như là một phần của câu lệnh if trước đó, bạn phải có dấu ngoặc nhọn để báo cho R rằng bạn chưa hoàn thành:

if(condition == TRUE) {x <- TRUE 
} else {x <- FALSE} 
Các vấn đề liên quan