Làm thế nào để thực hiện tạm dừng, ngủ, chờ X giây trong R?


128

Làm thế nào để bạn tạm dừng một tập lệnh R trong một số giây hoặc milis giây được chỉ định? Trong nhiều ngôn ngữ, có một sleephàm, nhưng ?sleeptham chiếu một tập dữ liệu. Và ?pause?waitkhông tồn tại.

Mục đích dự định là cho hoạt hình tự thời gian. Các giải pháp mong muốn hoạt động mà không yêu cầu đầu vào của người dùng.


5
@Ricardo, chúng tôi đã có một cuộc thảo luận toàn bộ về vấn đề này với Joshua và những người khác và cuối cùng chúng tôi đã đồng ý rằng cả "tạm dừng" và "ngủ" nên có trong tiêu đề. Tiêu đề cuối cùng là kết quả của một sự thỏa hiệp. Và bạn chỉ cần bước vào và không có bất kỳ tranh luận tại sao tiêu đề của bạn trở lại tốt hơn so với sửa đổi trước đó? Thêm "giấc ngủ" vào tiêu đề làm cho câu hỏi dễ tìm hơn nhiều, bởi vì "giấc ngủ" có nhiều ngôn ngữ và có khả năng cao là người dùng sẽ tìm kiếm nó. Tiêu đề hiện tại chứa rất nhiều từ balast và từ khóa quan trọng bị thiếu. Mục đích của rollback của bạn là gì?
TMS

Google "r ngủ" không thể tìm thấy nó, đã cố gắng sửa nó.
TMS

Câu trả lời:


144

Xem help(Sys.sleep).

Ví dụ: từ ?Sys.sleep

testit <- function(x)
{
    p1 <- proc.time()
    Sys.sleep(x)
    proc.time() - p1 # The cpu usage should be negligible
}
testit(3.7)

Năng suất

> testit(3.7)
   user  system elapsed 
  0.000   0.000   3.704 

1
Đây là mã ví dụ từ trang đó. Để tạm dừng trong 3,7 giây testit <- function (x) {p1 <- Proc.time () Sys.s ngủ (x) Proc.time () - p1 # Việc sử dụng cpu không đáng kể} testit (3.7)
Dan Goldstein

21
Nhân tiện, help.search ("ngủ") sẽ hướng bạn theo cách đó.
Dirk Eddelbuettel

Tại sao bạn không thể làm chỉ Sys.sleep(10)?
Léo Léopold Hertz

Tôi nghĩ rằng bạn hiểu sai ví dụ và minh họa của tôi cũng là biện pháp và do đó chứng minh chính xác điều đó,
Dirk Eddelbuettel 10/11/2016

13

Sys.s ngủ () sẽ không hoạt động nếu mức sử dụng CPU rất cao; như trong các quy trình ưu tiên cao quan trọng khác đang chạy (song song).

Mã này làm việc cho tôi. Ở đây tôi đang in 1 đến 1000 trong khoảng thời gian 2,5 giây.

for (i in 1:1000)
{
  print(i)
  date_time<-Sys.time()
  while((as.numeric(Sys.time()) - as.numeric(date_time))<2.5){} #dummy while loop
}

hàm Sys.s ngủ () không hoạt động trong trường hợp sử dụng của tôi và đây là cách duy nhất tôi có thể quản lý để tạo ra độ trễ cần thiết.
Pake
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.