2017-07-21 10 views
13

मैं निम्नलिखित चमकदार एप्लिकेशन के अंतर्गत है, निम्नलिखित तरीकेकैसे प्रोग्राम के आर कोड और टेम्पलेट के साथ निर्देशिका संरचना उत्पन्न करने के लिए

-- base_app 
    |-- server.R 
    |-- ui.R 
    `-- www 

उदाहरण के लिए व्यवस्थित, server.R इस रेखाएं हों, मैं स्वचालित रूप से ऐप निर्देशिका और फ़ाइल सामग्री उत्पन्न करने का एक तरीका ढूंढ रहा हूं।

  1. ऐप्लिकेशन का नाम mycool_app

  2. इनपुट फ़ाइल:: bar.txt

बाद में यह base_app में परिभाषित टेम्पलेट के आधार पर यह उत्पन्न होगा उदाहरण के लिए, अगर हम 2 पैरामीटर परिभाषित करते हैं।

-- mycool_app 
    |-- server.R 
    |-- ui.R 
    `-- www 

और नई server.Rinfile <- "bar.txt" शामिल होंगे।

मैंने whisker पर देखा। लेकिन यह केवल स्ट्रिंग के माध्यम से फ़ाइल के अंदर एन्कोडेड टेम्पलेट प्रदान नहीं करता है। मैं क्षमता ala Python's Jinja2 के बारे में सोच रहा हूँ।

आर में ऐसा करने का सबसे अच्छा तरीका क्या है?


अद्यतन:

एक और उदाहरण ui.R के लिए:

# Example of ui.R 
# Choices differs from analysis to analysis 
# Hand coded 
# --------------------------- 
choices_list <- list(
       "A. Rumef.XXX vs Salt"   = "Group_A.Rumef.XXX_vs_Salt.iv", 
       "B. Bra.XXX vs Salt"    = "Group_B.Bra.XXX_vs_Salt.iv", 
       "C. Salt.Rumef vs Bra"   = "Group_C.Salt.Rumef_vs_Bra.iv", 
       "D. XXX.Rumef vs Bra"    = "Group_D.XXX.Rumef_vs_Bra.iv" 
               ) 
selected_choices <- "Group_A.Rumef.XXX_vs_Salt.iv" 
analysis_name <- "Cool Analysis" 
fc_slider_threshold <- 0.8 

# Do more things with those variables. 

choices_list की सामग्री, selected_choices, analysis_name, fc_slider_threshold में नव mycool_app उत्पन्न शामिल होने के लिए आपूर्ति की जाएगी।

+0

मुझे यकीन है कि मुझे समझ में नहीं कर रहा हूँ कर रहे हैं। आपके प्रश्न के बीच क्या अंतर है और बस पूरे ऐप फ़ोल्डर को एक स्थान से दूसरे स्थान पर कॉपी करना है? – Florian

+0

@ फ्लोरियन मेरे पास कई पैरामीटर सेट हैं और इसके साथ मैं कई ऐप्स बनाना चाहता हूं। मैं उस चमकदार ऐप पीढ़ी को स्वचालित करना चाहता हूं। – pdubois

+0

क्षमा करें, मैं अभी भी 100% स्पष्ट नहीं हूं।मैं एक सर्वर देखता हूं। आर जिसमें 'infile <- "foo.txt" 'है, और वह server.R फ़ाइल भी एक अलग फ़ोल्डर में बनाई गई है। आपके पास किस तरह के पैरामीटर हैं और आप उन्हें किस तरह का व्यवहार करने की उम्मीद करते हैं? अभी ऐसा लगता है जैसे file.copy() काम करेगा। – Florian

उत्तर

9

सुनिश्चित नहीं हैं कि मैं सही ढंग से आपको क्या चाहिए, लेकिन कोड के इस टुकड़े कर रही है कि क्या आप

genAppStr <- function(appname, infile) { 
    dir.create(appname) 
    dir.create(paste0(appname, "/www")) 
    file.create(paste0(appname, "/", c("server.R", "ui.R"))) 
    writeLines(paste0("infile <- '", infile, "'"), paste0(appname, "/server.R")) 
} 

genAppStr("mycool_app", "bar.txt") 

चाहते या आप server.R में bar.txt की सामग्री सम्मिलित करना चाहते हैं लगता है समझते हैं?

अद्यतन प्रश्न के संबंध में

:

genAppStr1 <- function(appname, infile, pars) { 
    dir.create(appname) 
    dir.create(paste0(appname, "/www")) 
    file.create(paste0(appname, "/", c("server.R", "ui.R"))) 
    infilec <- readLines(infile) 
    glued <- sapply(infilec, function(x) with(pars, glue(x)), USE.NAMES = FALSE) 
    writeLines(as.character(glued), paste0(appname, "/server.R")) 
} 

उपयोग:

library(glue) 

ch <- c("A. Rumef.XXX vs Salt"   = "Group_A.Rumef.XXX_vs_Salt.iv", 
    "B. Bra.XXX vs Salt"    = "Group_B.Bra.XXX_vs_Salt.iv", 
    "C. Salt.Rumef vs Bra"   = "Group_C.Salt.Rumef_vs_Bra.iv", 
    "D. XXX.Rumef vs Bra"    = "Group_D.XXX.Rumef_vs_Bra.iv") 

options(useFancyQuotes = FALSE) 

vsQuote <- Vectorize(sQuote, USE.NAMES = FALSE) 

makeChoiceList <- function(ch) { 
    nms <- vsQuote(names(ch)) 
    chs <- vsQuote(ch) 
    chnm <- paste(nms, chs, sep = " = ") 
    paste0('list(', paste(chnm, collapse = ","), ')') 
} 

genAppStr1(
    "mycool_app", "infile.txt", 
    pars = list(
    par1 = makeChoiceList(ch), 
    par2 = sQuote("Group_A.Rumef.XXX_vs_Salt.iv"), 
    par3 = sQuote("Cool Analysis"), 
    par4 = 0.8 
) 
) 

और infile.txt की सामग्री

choices_list <- {par1} 
selected_choices <- {par2} 
analysis_name <- {par3} 
fc_slider_threshold <- {par4} 
+0

धन्यवाद। क्या होगा यदि मेरे पास अधिक जटिल सर्वर कोड (एकाधिक रेखाएं आदि) हैं तो टेम्पलेट नंबर होना अधिक सुविधाजनक होगा? – pdubois

+2

शायद आप इसके लिए गोंद का उपयोग कर सकते हैं। क्या आप किस तरह का सर्वर का एक सरल उदाहरण दे सकते हैं। आप उत्पन्न करेंगे? – nokiddn

+0

मेरे अपडेट की जांच करें। – pdubois

संबंधित मुद्दे