【发布时间】:2014-09-30 03:43:45
【问题描述】:
我想以软件包的形式共享一些软件,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“raw.df”是一个包含离散和连续类型变量的数据框。函数“count.unique”和“squash”将在包中定义。该脚本将数据帧分成两帧,“cat.df”被视为分类数据,“cts.df”被视为连续数据。
我对如何使用它的想法是,用户将读取数据框“raw.df”,获取脚本,然后交互式编辑“cat.df”和“cts.df”,也许结合一些类别并转换一些变量。
dcutoff <- 9
tail(raw.df)
(nvals <- apply(raw.df, 2, count.unique))
p <- dim(raw.df)[2]
(catvar <- (1:p)[nvals <= dcutoff])
p.cat <- length(catvar)
(ctsvar <- (1:p)[nvals > dcutoff])
p.cts <- length(ctsvar)
cat.df <- raw.df[ ,catvar]
for (i in 1:p.cat) cat.df[ ,i] <- squash(cat.df[ ,i])
head(cat.df)
for(i in 1:p.cat) {
cat(as.vector(table(cat.df[ ,i])), "\n")
}
cts.df <- raw.df[ ,ctsvar]
for(i in 1:p.cts) {
cat( quantile(cts.df[ ,i], probs = seq(0, 1, 0.1)), "\n")
}
现在,当然可以将其制成一个函数,返回一个包含 nvals、p、p.cat、cat.df 等的列表;然而,这对我来说似乎相当难看。然而,在包中包含脚本的唯一规定似乎是“演示”文件夹,这似乎不是正确的方法。我们将不胜感激地收到有关如何进行的建议。
(但不会正式表达感谢,因为似乎不推荐使用评论来表达感谢。)
【问题讨论】:
-
我使用
inst/scripts/,但也通过 Rscript 或 littler 使文件成为真正的(可执行)脚本。 -
为什么返回这些数量的函数在您看来很难看?是因为它的打印方式与脚本中的打印方式不同吗?您可以制作自己的自定义打印功能来完成该部分...
-
Dirk - 你知道使用这种方法的包吗?
-
Dason - 我正在尝试为包用户设置一个交互式试衣环境。在这种情况下,从列表中提取项目对于用户来说似乎不是一件很自然的事情。