2017-11-20 10 views
0

最近、パッケージをrOpenSciに提出しました。ユーザー側のコンソール出力にcat()ではなくmessage()を使用することをお勧めします。私のパッケージに切り替えると、レンダリングされたビネットのフォーマットが変わってしまったことに気付きました。私はこの問題を次のRマークダウン報告書に再現しました。Rマークダウン/ニットレポートで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) 
} 
``` 

最初のコードチャンクについては、希望の出力が得られます。すべての3行が1つの灰色のボックスにまとめられています。

## A 
## B 
## C 

しかし、2番目と3番目のチャンクでは、各行には個別の灰色のボックスが割り当てられます。

## 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()'よりも抑制する。パッケージ自体はCRAN上に1年近く置かれており、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

関連する問題