2017-11-20 15 views
0

최근에 패키지를 rOpenSci에 제출했으며 사용자 측 콘솔 출력에 cat() 대신에 message()을 사용하는 것을 선호합니다. 패키지로 전환 할 때, 렌더링 된 비 네트의 형식이 변경되는 것을 눈치 채지 못했습니다. 다음 R Markdown 보고서에서 문제를 재현했습니다.R Markdown/knitr 보고서에서 message()를 사용하여 출력을 잘랐다

--- 
title: "MWE" 
author: "Will Landau" 
date: "11/20/2017" 
output: html_document 
--- 

```{r testcat} 
for(x in LETTERS[1:3]){ 
    cat(x, "\n") 
} 
``` 

```{r testmessage} 
for(x in LETTERS[1:3]){ 
    message(x) 
} 
``` 

```{r testmessage2} 
for(x in LETTERS[1:3]){ 
    message(x, "\n", appendLF = FALSE) 
} 
``` 

첫 번째 코드 청크의 경우 원하는 출력을 얻습니다. 모든 세 줄은 단일 회색 상자에 함께 표시됩니다.

## A 
## B 
## C 

두 번째 및 세 번째 청크의 경우 각 줄마다 별도의 회색 상자가 지정됩니다.

## A 

.

## B 

.

## C 

어떻게이 같은 knitr 출력을 자르고없이 message()를 계속 사용합니까?

+0

다른 메모에서 이미 패키지가 CRAN에 있었습니까? 아니면 CRAN 이전에 ropensci에 제출 했습니까? – amrrs

+0

대신에'message'를 사용하는 특별한 이유가 있습니까? 기본적으로'message'는 stderr로 출력됩니다. 그래서 저는 여러분이이 문제를보고 있다고 생각합니다 - 이것은 에러가 그들 자신의 라인을 얻는 것과 같은 이유입니다. 'message' 도움말 페이지에서 : "기본 핸들러는 메시지를 stderr() 연결로 보냅니다." – Dason

+0

[rOpenSci가 선호하기 때문에] (https://github.com/ropensci/onboarding/blob/master/packaging_guide.md#-console-messages) 지금은'message()'를 사용하고 있습니다. 사용자가'cat()'보다 억제 할 수 있습니다. 패키지 자체는 거의 1 년 동안 CRAN에 있었으며 현재 rOpenSci로 옮겨 가고 있습니다. – landau

답변

1

나는 그것을 해결했다고 생각한다 : knitrcollapse 청크 옵션을 가지고있다. 내가 필요한 것은이 청크를 다른 청크 앞에 두는 것이었다.

```{r setup} 
knitr::opts_chunk$set(collapse = TRUE) 
``` 

출력이 예상보다 많이 줄어들지 만 약간의 수정이 이루어지면 실제로 서식이 훨씬 좋아집니다.

0

당신이 시도하고 문자열을 구축하고 다음과 같이 루프 외부 메시지 기능을 넣을 수 있습니다 :

```{r testmessage} 
single_message <- c() 
for(x in LETTERS[1:3]){ 
    single_message <- paste(single_message , x, sep = "\n") 
} 
message(single_message) 
``` 

참고이 예제는 시작에 줄 바꿈을 추가한다는 것을, 당신은 여분의 if 이것을 방지 할 수 있습니다 또는 루프 외부의 첫 번째 요소를 사용하여 single_message을 초기화합니다.

+0

죄송합니다. 패키지에 미리 모든 메시지를 통합 할 수 없습니다. – landau