2017-12-28 22 views
-1

저는 완전히이 책을 읽고, 위키의 지침에 따라 RR markdown 코드를 실행합니다. 그러나 나는 오류를 계속 받는다.R에서 실행 R Markdown from R

library(rmarkdown) 
library(knitr) 
library(scales) 
Sys.setenv(RSTUDIO_PANDOC = "C:/Program Files/RStudio/bin/pandoc") 

rmarkdown::render("test_results.rmd", output_format = "html_document", 
     output_file = "test_results_data_417.html", 
     params = list(filename = "input_file_template.xlsx", 
        connection_string = "driver={SQL Server};server=ServerName;database=DBName;trusted_connection=true" 
        )) 

내가 스크립트 위의 실행, 나는 오류 다음 수신 : enter image description here

날이 과정을 통해 이끌어 주실

으로 VisualStudio에서

나는 Script.R 파일이? 나는 필요한 다른 것을 첨부 할 수있다. 감사합니다

편집 여기

오류가 참조 곳으로, 스크립트 testing.R입니다 : 여기

library(RODBC) 
library(readxl) 


load_file <- function(query_filename) { 

    query_file <- read_excel(query_filename, col_types = c("text", "text", "text")) 

    query_file$control_query <- as.character(gsub("[\r\n]", " ", query_file$control_query)) 
    query_file$test_query <- as.character(gsub("[\r\n]", " ", query_file$test_query)) 

    query_file 
} 

run_tests <- function(connection_string, query_filename) { 

    query_file <- read_excel(query_filename,col_types = c("text", "text", "text")) 

    query_file$control_query <- as.character(gsub("[\r\n]", " ", query_file$control_query)) 
    query_file$test_query <- as.character(gsub("[\r\n]", " ", query_file$test_query)) 

    dbhandle <- odbcDriverConnect(connection_string) 

    all_results <- data.frame( test_name = character(), 
           control_query = character(), 
           test_query = character(), 
           control_results = character(), 
           test_results = character(), 
           passed = character(), 
           stringsAsFactors = FALSE 
          ) 

    for (i in 1:NROW(query_file)) { 

     test_name <- query_file[[i, "test"]] 
     control_query <- query_file[[i, "control_query"]] 
     test_query <- query_file[[i, "test_query"]] 

     control_results <- sqlQuery(dbhandle, control_query) 
     test_results <- sqlQuery(dbhandle, test_query) 
     passed <- control_results == test_results 

     new_row <- as.data.frame(c(test_name, control_query, test_query, control_results, test_results, passed)) 
     names(new_row) <- c("test_name", "control_query", "test_query", "control_results", "test_results", "passed") 
     all_results <- rbind(all_results, new_row) 

    } 
    odbcClose(dbhandle) 
    all_results 
} 

입니다 test_results.rmd 기본적으로,이 흐름 Script.R-> test_results.rmd-> 테스트해야합니다 .R

--- 
output: html_document 
css: rmd_style.css 
params: 
    filename: None 
    connection_string: None 
title: "Test Results For `r params$filename`" 
date: "`r format(Sys.time(), '%d %B, %Y')`" 
--- 

```{r, echo=FALSE, message=FALSE , warning = FALSE, include = FALSE} 
library(RODBC) 
library(readxl) 
library(knitr) 
library(scales) 

source(".\\testing.R") 

test_results <- run_tests(params$connection_string, params$filename) 
names(test_results) <- c("Test Name", "Control Query", "Test Query", "Control Results", "Test Results", "Passed") 
``` 

<br><br> 



```{r, echo=FALSE, message=FALSE} 
kable(test_results, format.args = list(digits = 10, nsmall = 0, decimal.mark = ".", big.mark = ",", scientific = FALSE)) 
``` 
+1

R 작업을 마크 다운 작업 외부에서 성공적으로 실행할 수 있습니까? 오류 메시지는 markdown 파일에있는 R 코드의 12 - 21 행에 문제가 있음을 나타냅니다.이 경우 6 개의 이름을 하나의 요소 만있는 벡터의 속성으로 설정하려고합니다. –

+0

@ LenGreski, 질문이 이상한 경우 미안 해요, markdown이 기본적으로 script.R에서 실행되는 경우, markdown없이 script.R을 어떻게 실행할 수 있습니까? 나는 12-21 행을 본다. Updating post – Sher

+0

VisualStudio에서 R을 실행하는 것에 익숙하지 않지만 RStudio를 사용하여 R Markdown 파일에서 각 코드 조각을 대화식으로 실행하고 HTML 또는 PDF로 변환하기 전에 R 코드가 작동하는지 확인할 수 있습니다. –

답변

2

오류가 R-Markdown에서 오지 않았지만 오류가있는 것으로 보입니다. erro 다음 줄에 R : 당신이 CONCATENATE 기능 c() 안에 그들에 as.data.frame()를 호출 할 때

new_row <- as.data.frame(c(test_name, control_query, test_query, control_results, test_results, passed)) 
names(new_row) <- c("test_name", "control_query", "test_query", "control_results", "test_results", "passed") 
최대한 멀리 볼 수

는 변수 test_name, control_query는 등, 상수, 그래서, 당신은 실제로 데이터 프레임을 생성 열 대신 여섯 대신 하나의 벡터를 전달하십시오.

이제 데이터 프레임 new_row의 이름 특성을 변경하려고하면 오류가 발생합니다. names(new_row)은 열 이름이 들어있는 벡터를 반환하며 길이는 1입니다. 길이 6 인 벡터로 덮어 쓰려고합니다.

문제를 해결해야 다음 코드로 두 줄을 교체 :

# Using data.frame to convert variables into data frame 

new_row <- data.frame(test_name, control_query, test_query, control_results, test_results, passed) 

를이 경우에도 이름이 더 이상 속성을 변경할 필요가 없습니다. data.frame()은 자동으로 변수 이름을 열 이름으로 사용합니다.

희망이 있습니다. 건배