2017-02-07 9 views
0

これは、私が一緒に実行したい、多くの別々の解析の小さなサンプルです。関数内で生成された見出しで各解析にフラグを立てます。最初の見出しは期待通りに出力されますが、関数によって生成された見出しは出力されません。関数で生成された見出しをhtml形式で取得するにはどうすればよいですか?knitr出力中の関数からhtmlを出力

 
R version 3.3.2 (2016-10-31) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X El Capitan 10.11.6 

RStudio 1.0.136 

knitr 1.15.1 
```{r initialize, echo=F, comment=NA} 

htmPrint = function(htm) { 
    structure(htm, class='knit_asis') 
    } 

doAnalysis = function(dat, depVar, indVar) { 

    print(htmPrint(paste0('<h3>AusMCP1 on ', indVar, '</h3>'))) 
    eval(parse(text=paste0('print(summary(lm(', depVar, '~', indVar, ', data=dat)))'))) 
    print(htmPrint('<hr>')) 
    } 

demoData = data.frame(dep1=rnorm(100), dep2=rnorm(100), ind1=runif(100), ind2=runif(100), ind3=runif(100)) 

varDep = names(demoData)[1:2] 
varInd = names(demoData)[3:5] 
``` 

This is a small sample of many separate analyses I want to run together, flagging each analysis with a heading generated in the function. 

I could use *results=asis* in the chunk command, but it produces 
unwanted formatting and extraneous output in the analysis output. 

```{r doAnalyses} 
htmPrint('<h2>Begin analyses</h2>') 

for (k in 1:length(varDep)) for (i in 1:length(varInd)) doAnalysis(demoData, varDep[k], varInd[i]) 
``` 

答えて

0

私はあなたがresults = 'asis'を使用し、ちょうどあなたが欲しいの出力を得るために機能変更する必要がありますと思います。私はprevious questionで参照されるいくつかの方法を使用して、panderというパッケージを使用します。

catとhtmlタグで同じ機能を利用できるため、htmPrint関数を使用する必要はありません。次に、printの代わりにprint_lmを使用して、要約を削除します。表形式の出力がうまくいきます。

```{r initialize, echo=F, comment=NA} 

library(pander) 

#Use the pander print method to print the model tables. 
#You could use other package print methods as well. 

print_lm <- function (x, ...) UseMethod("pander") 

doAnalysis = function(dat, depVar, indVar) { 

    cat('<h3>AusMCP1 on ', indVar, '</h3>') 
    eval(parse(text=paste0('print_lm(summary(lm(', depVar, '~', indVar, ', data=dat)))'))) 
    cat('<hr>') 
    } 

demoData = data.frame(dep1=rnorm(100), dep2=rnorm(100), ind1=runif(100), ind2=runif(100), ind3=runif(100)) 

varDep = names(demoData)[1:2] 
varInd = names(demoData)[3:5] 
``` 

I use *results=asis* and changed the output of your doAnalysis function to create formatted output. 

```{r doAnalyses, echo = FALSE, results='asis'} 
cat('<h2>Begin analyses</h2>') 

for (k in 1:length(varDep)) for (i in 1:length(varInd)) doAnalysis(demoData, varDep[k], varInd[i]) 
``` 

enter image description here

また、あらかじめモデリングのすべてを行うと、あなたのkable()や表形式の印刷方法を使用して、それらをプリントアウトし、その後、お好みに合わせてお使いのモデルの要約のすべてを整理するbroomパッケージを使用することができます選択。

+0

私は必要なことをしていません。私は要約情報を表示したいと思います。パンダを使用すると、大胆な文字で傍受のための1行、壊れない空白文字を持つ見出しの行、見出しと一直線にならない回帰係数が生成されます。 – user7528768

+0

上記のスクリーンショットが 'pander'を使ったコード出力であることを見て、' pander'の書式設定とアライメントに関して何を意味するのか混乱しています。要約のフルテキスト版を使用する場合は、適切な形式で独自の印刷方法を定義する必要があります。 –

+0

私のCSSは、あなたが表示した出力とは異なる外観の出力を生成しています。私は、私のCSSを再定義したり、パンダを使用したりすることなく、これを行う簡単な方法を望んでいました。それは関数内で生成された出力にHTMLをフォーマットするいくつかの方法はありませんか? – user7528768

関連する問題