Tạo hệ thống Nhắc / Trả lời để nhập dữ liệu vào R


83

Tôi đã tạo một số mã R để những người không biết gì về R sử dụng (mặc dù bản thân tôi cũng khá xanh). Tôi đã được mọi người dán dữ liệu ban đầu vào bảng điều khiển R (với kết quả hỗn hợp) và tôi hy vọng thiết lập một cách thân thiện hơn với người dùng để mọi người nhập dữ liệu.

Lý tưởng nhất là ai đó có thể ngồi xuống bàn điều khiển, gõ lệnh và được nhắc với các câu hỏi cụ thể về cách nhập dữ liệu.

Ví dụ: một người tải lên r và thấy một lời nhắc:

What is x value?

Người đó nhập:

2

Lời nhắc tiếp theo:

What is y value?

Người nhập:

3

Lời nhắc tiếp theo:

 What are T values?

Người nhập:

 4,3,2,1

Lời nhắc tiếp theo:

Giá trị V là gì?

Người nhập:

4,5,6,9

Và với 4 biến mới được xác định này (X, Y, T, V) bước tiếp theo của R là chạy đoạn mã viết sẵn

X+Y
V+T

Và trong bảng điều khiển, câu trả lời bật lên

5
8 8 8 10

Và mọi người đều hạnh phúc

Tôi xin lỗi vì đây không phải là dạng câu hỏi mã có thể lặp lại, nhưng tôi không chắc cách tiếp cận để khiến R đặt câu hỏi thay vì tôi đặt câu hỏi về R!

Câu trả lời:


74

Vì điều này được cho là chỉ được sử dụng như mã tương tác, readline()có thể làm việc cho bạn. Tôi đã không thêm bất kỳ kiểm tra lỗi nào, nhưng bạn có thể muốn thực hiện một cách hợp lý để đảm bảo đầu vào phù hợp. Đây là khái niệm cốt lõi mặc dù:

fun <- function(){
  x <- readline("What is the value of x?")  
  y <- readline("What is the value of y?")
  t <- readline("What are the T values?")
  v <- readline("What are the V values?")

  x <- as.numeric(unlist(strsplit(x, ",")))
  y <- as.numeric(unlist(strsplit(y, ",")))
  t <- as.numeric(unlist(strsplit(t, ",")))
  v <- as.numeric(unlist(strsplit(v, ",")))

  out1 <- x + y
  out2 <- t + v

  return(list(out1, out2))

}

3
Mã hoạt động tuyệt vời! Tôi hơi bối rối về cách bắt đầu nó, nhưng sau khi xem các ghi chú trên readline (), tôi chỉ thêm một dòng cuối cùng vào dòng "if (tương tác ()) fun ()" ở trên và nó tự động bắt đầu lời nhắc. Cảm ơn!
Vinterwoo

1
Cái này đẹp đấy. Tuy nhiên, tôi đã cố gắng hiểu chính xác những gì đang xảy ra với các hàm unlist và strsplit. R đang làm gì ở đây?
Seanosapien

1
@Seanosapien Strsplit là cần thiết để loại bỏ dấu phẩy ra khỏi đầu vào nếu người dùng nhập '"4,3,2,1"' như trong ví dụ ban đầu. Nó không cần thiết nếu đầu vào không ở định dạng đó.
Lauren Fitch

58

Xem thêm ?menutừ utilsđể biết lời nhắc và giao diện menu cơ sở văn bản đơn giản, cũng được sử dụng trong devtools.

Đây là một ví dụ:

> menu(c("Yes", "No"), title="Do you want this?")
Do you want this? 

1: Yes
2: No

Selection:

7

Vì câu hỏi này đã được đưa về từ cõi chết, nó có thể đang viết một câu trả lời cập nhật.

Nếu GUI hoàn toàn hữu ích trong trường hợp này, gói Shiny hiện đã được tích hợp tốt với RStudio và sẽ rất dễ dàng để triển khai điều này như một ứng dụng Shiny. Trang web http://shiny.rstudio.com có thêm thông tin, bao gồm các ví dụ và tài liệu.


5

Nó có thể là quá mức cần thiết cho trường hợp cụ thể này, nhưng swirlgói này rất tốt để giới thiệu R một cách tương tác cho người mới bắt đầu.

swirl là một gói phần mềm cho ngôn ngữ lập trình R, biến bảng điều khiển R thành một môi trường học tập tương tác. Người dùng nhận được phản hồi ngay lập tức khi họ được hướng dẫn thông qua các bài học theo nhịp độ của bản thân về khoa học dữ liệu và lập trình R.

Hướng dẫn tạo nội dung có thể được tìm thấy tại đây: http://swirlstats.com/instructors.html .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.