在C#中执行R脚本以呈现rmarkdown(并提供参数)

时间:2017-04-19 18:42:07

标签: c# r r-markdown

我正在尝试在Windows窗体中创建一个GUI(目前正在尝试从控制台执行),它将提供一些参数,这些参数将传递给Rmarkdown呈现为任何格式。将来我希望这可以通过GUI完成,但至少开始我想我会尝试一个基本的控制台应用程序。

我有三个档案;一个应该执行R代码的.cs文件,test.R包含一行来呈现Rmarkdown文件。 (如果我在例如RStudio中运行它可以正常工作)。最后,我的rmarkdown文件基本上运行了一个非常基本的SQL查询。

ConsoleApp1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            /* RScriptRunner.RunFromCmd(curDirectory + @"\test.R", "rscript.exe");*/
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "C:/Program Files/R/R-3.3.1/bin/Rscript.exe";
            proc.StartInfo.WorkingDirectory = "C:/Users/chris/Documents";
            proc.StartInfo.Arguments = "C:/Users/chris/Documents/test.R";
            proc.StartInfo.UseShellExecute = true;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.Start();
            Console.WriteLine("Report generated");
            Console.Read();
        }
}
}

test.R

rmarkdown::render("C:/Users/chris/Documents/Rmarkdown.Rmd", params = list(ProdNo = "501", TransTyp = 1))

Rmarkdown.Rmd

---
title: "Rmarkdown-report" 
author: "Chris"
date: "2017"
output: html_document
params:
   ProdNo: '501'
   TransTyp: 1
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r SQLConnection, include=FALSE}

library(RODBC) 

dbhandle <- odbcDriverConnect('driver={SQL Server};server=myserver\\SQLEXPRESS;database=mydb;trusted_connection=true')
```
```{r SQLQuery, include=FALSE}
tempQuery <- sprintf('SELECT * FROM ProdTr WHERE ProdNo =  %s AND TrTp = %s', params$ProdNo, params$TransTyp)
```

```{r Results, include=TRUE}

results <-  sqlQuery(dbhandle, tempQuery)

results
```

```{r Cleanup, include=FALSE}
odbcClose(dbhandle)
```

我设法让脚本至少开始执行并提供辅助控制台窗口。但是,我没有得到R代码本身生成的预期HTML文件。

如果有人也知道如何使C#打开生成的文件,这将是惊人的。

非常感谢任何正确方向的帮助或指示!

此致

克里斯

0 个答案:

没有答案