我正在阅读texinfo中的R FAQ source,并认为如果将其解析为R结构,将更易于管理和扩展。有几个与此相关的现有示例:
每个都有一些理想的功能。
在我看来,R社区缺少FAQ,因为它们缺乏:i)从R命令行轻松访问(即通过R包); ii)强大的搜索功能; iii)交叉引用; iv)贡献软件包的扩展。从
bibtex
和fortunes
包中汲取想法,我们可以设想一个新系统,其中:可以从R中搜索
fortune()
接口(interface):faq("lattice print")
或faq() #surprise me!
,faq(51)
,faq(package="ggplot2")
。 FAQ.rda
,其格式尚不清楚(请参见下文)Sweave
/ knitr
驱动程序以输出格式正确的Markdown / LaTeX等。问题
我不确定最好的输入格式是什么。转换现有的FAQ或添加新条目。
在嵌套列表树中使用R语法(或临时S3 / S4 / ref
class
或structure
,\list(title = "Something to be \\escaped", entry = "long text with quotes, links and broken characters", category = c("windows", "mac", "test"))
Rd
文档虽然本身不是R结构(它更是LaTeX的一个子集,具有自己的解析器),但也许可以提供一个更具吸引力的输入格式示例。它在R中还具有一组tools to parse the structure。但是,其当前的目的是相当具体且有所不同的,它面向R函数的常规文档,而不是FAQ条目。它的语法也不理想,我认为更现代的标记(如markdown)将更具可读性。还有其他东西,也许是将markdown文件解析为R结构的示例?例如,将Rd文件偏离其预期目的吗?
总结
我想提出:
1-一个很好的R结构设计(可能是类),它将
fortune
包扩展到更常见的条目,例如FAQ项目2-一种更方便的格式来输入新的常见问题解答(而不是当前的texinfo格式)
3-以R或其他某种语言(野牛?)编写的解析器,用于将现有FAQ转换为新结构(1),和/或将新输入格式(2)转换为R结构。
更新2:在悬赏期的最后两天,我得到了两个答案,虽然都很有趣,但完全不同。由于问题非常广泛(可以说是病态),所以没有一个答案可以提供完整的解决方案,因此,无论如何我现在都不会接受答案。至于赏金,我将其归因于赏金过期之前投票最多的答案,希望有办法将其平均分配。
最佳答案
(此地址指向第3点。)
您可以将texinfo文件转换为XML
wget http://cran.r-project.org/doc/FAQ/R-FAQ.texi
makeinfo --xml R-FAQ.texi
然后使用XML包读取它。
library(XML)
doc <- xmlParse("R-FAQ.xml")
r <- xpathSApply( doc, "//node", function(u) {
list(list(
title = xpathSApply(u, "nodename", xmlValue),
contents = as(u, "character")
))
} )
free(doc)
但是将其转换为文本要容易得多
makeinfo --plaintext R-FAQ.texi > R-FAQ.txt
并手动解析结果。
doc <- readLines("R-FAQ.txt")
# Split the document into questions
# i.e., around lines like ****** or ======.
i <- grep("[*=]{5}", doc) - 1
i <- c(1,i)
j <- rep(seq_along(i)[-length(i)], diff(i))
stopifnot(length(j) == length(doc))
faq <- split(doc, j)
# Clean the result: since the questions
# are in the subsections, we can discard the sections.
faq <- faq[ sapply(faq, function(u) length(grep("[*]", u[2])) == 0) ]
# Use the result
cat(faq[[ sample(seq_along(faq),1) ]], sep="\n")
关于r - R数据结构的常见问题标记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10763402/