2014-12-10 16 views
11

Tôi có thể cung cấp 5 giây để người dùng viết nội dung nào đó để yêu cầu tạm dừng thời lượng vô hạn. Nếu tạm dừng không được yêu cầu trong vòng 5 giây này, thì quá trình tiếp tục. Nếu một tạm dừng được yêu cầu, sau đó người dùng có tất cả các thời gian (s) ông cần và (s) ông có thể nhấn "nhập" để tiếp tục quá trình bất cứ khi nào anh ta muốn.R: Cung cấp 5 giây để yêu cầu tạm dừng. Nếu không có yêu cầu tạm dừng, hãy tiếp tục quy trình

Sự quan tâm của chức năng như vậy là nếu người dùng vắng mặt, thời gian tạm dừng chỉ kéo dài trong 5 giây. Và nếu người dùng có mặt, thì (s) anh ta có thể tận hưởng một tạm dừng để xem các đồ thị đã được sản xuất ví dụ.

Mã này cuối cùng có thể trông như thế:

DoYouWantaPause = function(){ 
    myprompt = "You have 5 seconds to write the letter <p>. If you don't the process will go on." 

    foo = readline(prompt = myprompt, killAfter = 5 Seconds) # give 5 seconds to the user. If the user enter a letter, then this letter is stored in `foo`. 

    if (foo == "p" | foo == "P") { # if the user has typed "p" or "P" 
     foo = readline(prompt = "Press enter when you want to resume the process") # Offer a pause of indefinite length 
    } 
} 

# Main 
for (i in somelist){ 
    ... 
    DoYouWantaPause() 
} 
+1

# 1 lý do để đọc tài liệu trước khi thử những điều mới: '? R.utils :: withTimeout: Hơn nữa, không thể ngắt/thoát ra khỏi lời nhắc" readline "(ví dụ: readline() và readLines()) sử dụng hết thời gian chờ; ngoại lệ thời gian chờ sẽ không được ném cho đến sau khi người dùng hoàn tất lời nhắc (tức là sau khi nhấn ENTER). ' – rawr

+0

Vâng, tôi biết điều đó không có ý nghĩa nhưng sẽ hữu ích khi giải thích nhu cầu của tôi. Cảm ơn vì bản sao của tài liệu. –

Trả lời

10

Đây là một chức năng nhỏ nhanh chóng dựa trên tcltk và tcltk2 gói:

library(tcltk) 
library(tcltk2) 

mywait <- function() { 
    tt <- tktoplevel() 
    tmp <- tclAfter(5000, function()tkdestroy(tt)) 
    tkpack(tkbutton(tt, text='Pause', command=function()tclAfterCancel(tmp))) 
    tkpack(tkbutton(tt, text='Continue', command=function()tkdestroy(tt)), 
     side='bottom') 
    tkbind(tt,'<Key>', function()tkdestroy(tt)) 

    tkwait.window(tt) 
    invisible() 
} 

Run mywait và một cửa sổ nhỏ sẽ bật lên với 2 nút, nếu bạn không làm gì thì sau khoảng 5 giây, cửa sổ sẽ biến mất và mywait sẽ trả lại cho phép R tiếp tục. Nếu bạn nhấp vào "Tiếp tục" bất cứ lúc nào thì nó sẽ trở lại ngay lập tức. Nếu bạn bấm vào "Tạm dừng" thì đếm ngược sẽ dừng lại và nó sẽ đợi bạn bấm vào tiếp tục (hoặc bấm một phím) trước khi tiếp tục.

Đây là phần mở rộng của câu trả lời được cung cấp here.

+1

Ngọt ngào! Điều đó hoạt động hoàn hảo. Cảm ơn rất nhiều! –

Các vấn đề liên quan