出于教学目的,我希望将purl
文件的.Rnw
块放入单独的文件中。这个答案解释了如何做到这一点:
How to purl each chunks in .Rmd file to multiple .R files using Knitr
但该方法不保留块选项。由于我已经生成了块,因此保留fig.width
和fig.height
选项很重要。理想情况下,我想要一个看起来像这样的块:
<<plot, fig.width = 3, fig.height = 5, outwidth = '.75\\textwidth'>>=
plot (1,1)
@
成为名为plot.R
的文件,如下所示:
#+ fig.width = 3, fig.height = 5
plot (1,1)
也就是说,将块选项fig.width
和fig.height
转换为spin()
可识别的格式,如purl()
那样,并删除块选项与spin()
无关,或out.width
在Word中造成问题,例如string MY_DEFAULT_VALUE = 'Pick One:';
string queryString = "SELECT * FROM my_table";
//Populate Dictionary:
Dictionary<string,ComboBox > columnDictionary= new Dictionary<string, ComboBox>();
columnDictionary.Add("COL_A", comboBox1);
columnDictionary.Add("COL_B", comboBox2);
columnDictionary.Add("COL_C", comboBox3);
//etc...
List<KeyValuePair<string, ComboBox>> appendedColumns = new List<KeyValuePair<string, ComboBox>>();
foreach (KeyValuePair<string, ComboBox> entry in columnDictionary)
{
if (!String.Equals(entry.Value.Text, MY_DEFAULT_VALUE, StringComparison.OrdinalIgnoreCase))
{
string currentColumnName = entry.Key;
string currentColumnParameter = "@" + entry.Key;
if (appendedColumns.Count>1)
{
queryString += " AND ";
}
else
{
queryString += " WHERE ";
}
queryString += currentColumnName + " = " + currentColumnParameter;
appendedColumns.Add(entry);
}
}
cmd.CommandText = queryString;
if (appendedColumns.Count > 0)
{
foreach (KeyValuePair<string, ComboBox> entry in appendedColumns)
{
string currentColumnParameter = "@" + entry.Key;
string currentParameterValue = entry.Value.Text;
cmd.Parameters.AddWithValue(currentColumnParameter, currentParameterValue);
}
}
//Continue on your way...
。所有这些都是为了创建用户友好的代码文件。
答案 0 :(得分:1)
由于您所指的答案并未从purl
的结果中复制标题行,因此除了块名称之外,您将丢失所有内容。虽然您可以调整它以粘贴标题,但实际上并不难构建解析purl
输出的函数 - 比尝试解析Rmd
或{{1}要容易得多无论如何,文件都比Rnw
确切地如何排序更容易。
knitr
一对夫妇注意到:
purl_chunks <- function(input_file){
purled <- knitr::purl(input_file) # purl original file; save name to variable
lines <- readLines(purled) # read purled file into a character vector of lines
starts <- grep('^## ----.*-+', lines) # use grep to find header row indices
stops <- c(starts[-1] - 1L, length(lines)) # end row indices
# extract chunk names from headers
names <- sub('^## ----([^-]([^,=]*[^,=-])*)[,-][^=].*', '\\1', lines[starts])
names <- ifelse(names == lines[starts], '', paste0('_', names)) # clean if no chunk name
# make nice file names with chunk number and name (if exists)
file_names <- paste0('chunk_', seq_along(starts), names, '.R')
for(chunk in seq_along(starts)){ # loop over header rows
# save the lines in the chunk to a file
writeLines(lines[starts[chunk]:stops[chunk]], con = file_names[chunk])
}
unlink(purled) # delete purled file of entire document
}
和.Rnw
两个文件都.Rmd
相同,因此适用于其中之一。purl
的{{1}}参数的默认设置(1L
)。 purl
不会有块头,因此无论如何都是无意义的,但它会处理documentation
(其中包括文本块作为0L
注释)愚蠢。但是,如果你想要带有以下代码块的文本块,它可以重建。2L
的输出标题行看起来与上面的示例完全相同(它们以roxygen
开头并且用连字符填充),但它们purl
正确;结果服从块选项。