시간, 완료율 및 프로세스의 현재 상태와 같은 상태 메시지를 사용자에게 표시하는 함수를 작성하고 싶습니다. 메시지를 처리 할 수는 있지만 콘솔에 인쇄하고 다른 메시지를 뒤집어서 스크롤하는 것 외에 다른 작업을 수행하고 싶습니다. 메시지가 message()
처럼 스크롤하지 않고 그래픽없이 변경되기를 정말로 바랍니다. R이 가능합니까?에 상태 메시지가 표시됩니다.
답변
어때?
for(i in 1:10) {
Sys.sleep(0.2)
# Dirk says using cat() like this is naughty ;-)
#cat(i,"\r")
# So you can use message() like this, thanks to Sharpie's
# comment to use appendLF=FALSE.
message(i,"\r",appendLF=FALSE)
flush.console()
}
'cat()'과 같은 불만을 제기하는 R-bloggers 게시물에서 논의 된 것처럼'cat()'을 사용하지 말고,'message()'를 사용한다. –
@Dirk :'message (..., appendLF = FALSE)'이어야합니다. 그렇지 않으면 OP가 특별히 피하고 싶었던 콘솔에 스크롤링 메시지가 나타납니다. – Sharpie
@Dirk'cat()'을'message()'로 바꾸면 각 업데이트마다 개행 문자가 추가됩니다. 개행을 막기 위해 여분의 조치를 취해야합니까? FWIW,'txtProgressBar'는'cat()'을 사용합니다. –
가이 작업을 수행하는 더 우아한 방법이 될 수 있지만 그것을 할 수 있습니다 : 당신이 자동으로 메시지를 생성하는 경우
test.message <- function() {
for (i in 1:9){
cat(i)
Sys.sleep(1)
cat("\b")
}
}
것은, 당신은 얼마나 많은 \ B 문자를 계산해야합니다 정확한 양을 백업하기 위해 출력하는 것이지만 그것은 매우 간단합니다.
utils
패키지에는 txtProgressBar
과 업데이트 완료 기능이 포함되어 있습니다.이 기능을 사용하면 프로세스 완료율을 표시하는 데 사용할 수 있습니다.
txtProgressBar
호출하는 동안 생성 된
up1
,
up2
및
up3
기능을 참조하십시오.
환상적입니다! 'tpb <- txtProgressBar (...);를 통해 자신의 업데이트 기능을 생성하고 설정할 수도 있습니다. myUpFun <- 함수 (값) {...}; tpb $ up <- myUpFun'입니다. 그런 다음 Dirk이 노이즈를 억제 할 수 있도록'message()'를 사용하여 업데이트 함수를 작성할 수 있습니다. ;-) –
@ Joshua : 좋은 관찰! 커스텀 업데이트 함수를 만드는 것에 대해 숙고 할 때, 그것을 구현하기 위해서'txtProgressBar()'를 복사하고 다시 작성해야한다는 생각을했습니다. – Sharpie
'plyr :: progress_text'도 있습니다. 그것은 txtProgressBar'에 대한 단순한 래퍼입니다. 그러나 ... – aL3xa
여기 블링 블링이 있습니다. ?tcltk::tkProgressBar
.
pb <- tkProgressBar("test progress bar", "Some information in %",
0, 100, 50)
Sys.sleep(0.5)
u <- c(0, sort(runif(20, 0 ,100)), 100)
for(i in u) {
Sys.sleep(0.1)
info <- sprintf("%d%% done", round(i))
setTkProgressBar(pb, i, sprintf("test (%s)", info), info)
}
Sys.sleep(5)
close(pb)
정말 멋지지만, 현재 유일한 필요는 텍스트 전용 솔루션입니다. –
tcltk가 터지면 끝까지 질문을 읽지 못했습니다. 그것은 충동적인 대답이었고, 나는 사과했다. 어쩌면 미래의 당신은 언젠가 그것을 필요로 할 것입니다. –
+1 환상적. 심지어 TclTk에 대해 조금 배우게됩니다. – Iterator
"이것은 R.이다가없는 경우. 단 방법에 대해 설명합니다." - Simon Blomberg –