myfunction <- function(x) {
switch(x,
print("one"),
print("two"),
print("three"))}
myfunction(1)
## [1] "one"
Edit: Như đã đề cập trong ý kiến, phương pháp này không được đánh giá các giá trị đang được nhập vào, thay vì sử dụng chúng như một chỉ mục. Vì vậy, nó hoạt động trong trường hợp của bạn nhưng nó sẽ không hoạt động nếu các câu lệnh được sắp xếp lại (xem @Joshs trả lời cho cách tiếp cận tốt hơn). Dù bằng cách nào, tôi không nghĩ rằng switch
là chức năng phù hợp để sử dụng trong trường hợp này, vì nó chủ yếu có nghĩa là để chuyển đổi giữa các lựa chọn thay thế khác nhau, trong khi trong trường hợp của bạn, về cơ bản bạn đang chạy cùng một chức năng lặp đi lặp lại. Do đó, việc thêm một câu lệnh cho mỗi phương án thay thế có vẻ như quá nhiều công việc (ví dụ, nếu bạn muốn hiển thị 20 số khác nhau, bạn sẽ phải viết 20 câu lệnh khác nhau).
Thay vào đó, bạn có thể thử các english
gói mà sẽ cho phép bạn hiển thị càng nhiều con số như bạn sẽ xác định trong báo cáo ifelse
library(english)
myfunction2 <- function(x) {
ifelse(x %in% 1:3,
as.character(as.english(x)),
"default")}
myfunction2(1)
## [1] "one"
myfunction2(4)
## [1] "default"
Ngoài ra, bạn cũng có thể tránh sử dụng switch
(mặc dù không nhất thiết phải đề nghị) bằng cách sử dụng match
myfunction3 <- function(x) {
df <- data.frame(A = 1:3, B = c("one", "two", "three"), stringsAsFactors = FALSE)
ifelse(x %in% 1:3,
df$B[match(x, df$A)],
"default")}
myfunction3(1)
## [1] "one"
myfunction3(4)
## [1] "default"
Nguồn
2014-12-03 19:02:36
Nếu bạn không nhớ cho tôi biết làm thế nào để thêm mặc định cho tuyên bố chuyển đổi này? – Venkatesh
Thay vì 'function (x)' do 'function (x = 1)', ví dụ (nếu bạn muốn 1 là mặc định của bạn). Bạn cũng có thể xóa tất cả các tên và chỉ cần đặt 'chuyển đổi (x, {print (" one ")}, {print (" two ")}, {print (" ba ")} )' (wihtout the tên) như MrFlick đã đề cập –
Tôi nghĩ rằng tôi không rõ ràng với câu hỏi của tôi. Xin lỗi vì chuyện đó. Tôi muốn cung cấp cho trường hợp mặc định cho trường hợp chuyển đổi của tôi, làm thế nào tôi sẽ làm điều đó? – Venkatesh