knitr::opts_chunk$set(echo = TRUE)
library(dplyr) library(rmdgrader) library(econDS) library(tidyverse) library(googledrive) rprojroot::is_rstudio_project$make_fix_file() -> .root datafilename <- file.path(.root(),params$gradingFolder,params$title,"data4step3.Rdata") load(datafilename, envir = .GlobalEnv) correctAnsFilename = file.path( .root(), params$ansfilename ) gradeSavingFilename <- file.path(.root(),params$gradingFolder,params$title,"data4step4.Rdata") load(gradeSavingFilename, envir=.GlobalEnv) returnFolder <- file.path(.root(), params$submissionFolder, params$title, "return") problemFolder <- file.path(returnFolder, "cannotSynthesized") copy2returnGDfolderFilename = file.path(.root(), params$gradingFolder, params$title, "data4step5.Rdata") classDriveFolderPath = params$classDriveFolderPath if(!dir.exists(problemFolder)) dir.create(problemFolder) ansLabels <- colnames(tb_grades %>% select(contains("ans"))) load( file.path( .root(),"109-1-completeRoster.Rdata"), envir = .GlobalEnv ) if(!dir.exists(returnFolder)) dir.create(returnFolder)
synthesizeWithCorrectAns ={ synthersizeWithCorrectAnsFunctional( correctAnsFilename ) }
generateReturnRmds = { allRmds <- file.path(.root(), params$submissionFolder, params$title, tb_grades$name) for(.x in seq_along(allRmds)){ cat(.x, " ", basename(allRmds[[.x]]),"\n") tryCatch( { synthesize_returnRmd( allRmds[[.x]], tb_grades[.x,], synthesizeWithCorrectAns, returnFolder) }, error=function(e){ cat(basename(allRmds[[.x]]), " can not be synthesized.\n") file.copy( from = allRmds[[.x]], to = file.path( problemFolder, basename(allRmds[[.x]]) ) ) } ) } }
list.files(file.path(root(), "studentsSubmission/hw1/return/"), full.names = T) -> returnRmds file.edit(returnRmds[[2]])
result_copy2returnGDfolder = { title=params$title correctAnsTemplateFilename = file.path(.root(),"homeworks",basename(correctAnsFilename)) localGDReturnFolderPath=params$localGDReturnFolderPath # 如果是TA在做的話,就需要改用這行(前提是frontmatter的parameter有設定對) # localGDReturnFolderPath=params$localGDReturnFolderPath_ByTA generateReturnRmds_then_copy2googleDriveReturnFolder( title, completeRoster, correctAnsFilename, localGDReturnFolderPath ) -> result_copy2returnGDfolder save( result_copy2returnGDfolder, file = copy2returnGDfolderFilename ) result_copy2returnGDfolder }
deadline <- lubridate::today()+lubridate::days(7) content <- { glue::glue("問題反應截止日期: {deadline} 請用以下格式來寫:(一人請只留一則訊息,裡頭包含你所有的問題,否則會影響後續的程式處理) --- 學號:411073007 ans11 我的答案是 .... 但.....(陳述內容自定) ans31 我的答案是.... 但 ....(陳述內容自定)") } title = glue::glue("{params$title} 批改方式問題") post_disputeIssue2Github( repoUrl = params$disputeGithub, title=title, content=content ) -> response
result_setupIndividualReturnFolder = { gd_returnFolderIndividuals <- create_individualGoogleDriveReturnFolder(classDriveFolderPath, roster) gd_returnFolderIndividuals_shared <- share_gdReturnFolders(gd_returnFolderIndividuals) destfile = file.path( .root(), params$gradingFolder, params$title, "gd_returnFolderIndividuals_shared.Rdata" ) save(gd_returnFolderIndividuals_shared, file=destfile) gd_returnFolderIndividuals_shared }
load(destfile)
replacement <- list( studentname="謝琪", examTitle="Midterm1", grade="10") contentTemplate <- "{studentname}同學好, \n你的{examTitle}成績是{grade}。\n祝學習愉快\n茂廷老師" #' Generate content with keywords replaced with values defined in replacement object #' #' @param contentTemplate A character vector of content template, keywords to be replaced must formed as `{keyword}` as it is taken care by glue::glue() #' @param replacement A list of keyword=value pairs #' #' @return #' @export #' #' @examples none. generate_emailContent <- function(contentTemplate, replacement){ contentTemplate <- paste0(contentTemplate, collapse="\n") with( replacement, glue::glue(contentTemplate) ) } generate_emailContent(contentTemplate, replacement)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.