[r] 함수의 출력 억제

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

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

출력을 억제하는 방법



답변

를 사용하지 않고이 작업을 수행하려는 이유는 분명하지 sink않지만 invisible()함수 에서 모든 명령을 래핑 할 수 있으며 출력을 억제합니다. 예를 들면 :

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

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

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


답변

capture.output()기능을 사용하십시오 . 일회성처럼 작동하며 sink()와 달리 invisible()인쇄 메시지 이상을 억제 할 수 있습니다. /dev/nullUNIX 또는 NULWindows 에서 파일 인수를로 설정하십시오 . 예를 들어 Dirk의 메모를 고려하면 다음과 같습니다.

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

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


답변

아래와 같이 ‘capture.output’을 사용할 수 있습니다. 이렇게하면 나중에 데이터를 사용할 수 있습니다.

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

test$betas


답변

R은 할당되지 않은 표현식의 출력 만 자동으로 인쇄하므로의 결과를 apply변수에 할당 하면 인쇄되지 않습니다.


답변

다음 함수는 원하는 것을 정확하게 수행해야합니다.

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

예를 들어 여기에 함수가 있습니다.

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

달리는

x = hush(foo())

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

UNIX OS에서는 “NUL”을 “/ dev / null”로 바꿔야합니다.


답변

RMarkdown에 적용 할 수있는 솔루션을 찾고있는 사람이 여기에 도착하면 모든 출력이 표시되지 않습니다.

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

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


})})
```

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


답변

답변에 대한 해들리의 코멘트 만들기 (더 잘 보이게하기를 바랍니다). plyr패키지 사용으로 인쇄없이 적용 패밀리 사용 가능

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

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

2020-05-19에 reprex 패키지 (v0.3.0)에 의해 생성됨