programing

함수의 출력 억제

bestprogram 2023. 6. 21. 22:49

함수의 출력 억제

하나의 명령 출력을 억제하려고 합니다(이 경우에는apply함수)를 선택합니다.

를 사용하지 않고 이 작업을 수행할 수 있습니까?sink()아래 설명된 해결책을 찾았지만 가능하다면 한 줄로 하고 싶습니다.

출력 억제 방법

당신이 왜 이것을 하지 않고 하고 싶은지는 명확하지 않습니다.sink그러나 다음에서 모든 명령을 래핑할 수 있습니다.invisible()출력을 억제합니다.예를 들어:

1:10 # prints output
invisible(1:10) # hides it

그렇지 않으면 세미콜론과 괄호를 사용하여 항상 한 줄로 항목을 결합할 수 있습니다.

{ sink("/dev/null"); ....; sink(); }

사용capture.output()기능.일회용처럼 작동합니다.sink()와는invisible()메시지를 출력하는 것 이상의 것을 억제할 수 있습니다.file 인수를 다음으로 설정합니다./dev/nullUNIX 또는NUL창문에예를 들어 Dirk의 노트를 고려하면 다음과 같습니다.

> invisible(cat("Hi\n"))
Hi

> capture.output( cat("Hi\n"), file='NUL')
> 

다음 기능은 사용자가 원하는 것을 정확히 수행해야 합니다.

hush=function(code){
  sink("NUL") # use /dev/null in UNIX
  tmp = code
  sink()
  return(tmp)
}

예를 들어 다음과 같은 기능이 있습니다.

foo=function(){
  print("BAR!")
  return(42)
}

입니다.

x = hush(foo())

42를 x에 할당하지만 STDOUT에 "BAR!"을 인쇄하지 않습니다.

UNIX OS에서는 "NUL"을 "/dev/null"로 대체해야 합니다.

R은 지정되지 않은 식의 출력만 자동으로 인쇄하므로 다음과 같은 결과만 할당합니다.apply변수에 연결하면 인쇄되지 않습니다.

아래와 같이 'dll.output'을 사용할 수 있습니다.이를 통해 나중에 데이터를 사용할 수 있습니다.

log <- capture.output({
  test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})

test$betas

R Markdown에 적용할 수 있는 솔루션을 찾고 있는 사람이 있을 경우, 이는 모든 출력을 억제합니다.

```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({

# Your code goes here
2 * 2
# etc
# etc


})})
```

코드는 실행되지만 출력은 HTML 문서로 인쇄되지 않습니다.

invisible(cat("Dataset: ", dataset, fill = TRUE))
invisible(cat(" Width: " ,width, fill = TRUE))
invisible(cat(" Bin1:  " ,bin1interval, fill = TRUE))
invisible(cat(" Bin2:  " ,bin2interval, fill = TRUE))
invisible(cat(" Bin3:  " ,bin3interval, fill = TRUE))

라인의 끝 또는 다음 라인에서 NULL 없이 출력을 생성합니다.

Dataset:  17 19 26 29 31 32 34 45 47 51 52 59 60 62 63
Width:  15.33333

Bin1:   17 32.33333
Bin2:   32.33333 47.66667
Bin3:   47.66667 63

다음은 shash할 코드의 오류에 강한 버전입니다.

quietly <- function(x) {
  sink("/dev/null") # on Windows (?) instead use `sink("NUL")`
  tryCatch(suppressMessages(x), finally = sink())
}
  • 이것은 수락된 답변을 직접 기반으로 합니다. 감사합니다.
  • 그러나 조용한 코드에서 오류가 발생할 경우 출력이 음소거 상태로 유지되는 것을 방지합니다.

해들리의 답변에 대한 논평:인쇄하지 않고 적용 제품군을 사용할 수 있는 방법은plyr꾸러미

x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#> 
#> [[2]]
#> [1] 3

plyr::l_ply(x, function(x) x + 1)

만약 당신이 어떻게 억제할지 궁금하다면.warning()사용할 수 있습니다.suppressWarnings()이와 같이:

suppressWarnings(warning("hi"))

이 두 가지는 여전히 경고를 표시합니다.

invisible(warning("Hi"))
# shows 'Hi'

capture.output(warning("Hi"), file='NUL')
# shows 'Hi'

언급URL : https://stackoverflow.com/questions/2723034/suppress-output-of-a-function