我想将一些软件作为一个包共享,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“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 等的列表;然而,这对我来说似乎相当难看。然而,在包中包含脚本的唯一规定似乎是“演示”文件夹,这似乎不是正确的方法。我们将不胜感激地收到有关如何进行的建议。
(但不会正式表达感谢,因为似乎不推荐使用评论来表达感谢。)
最佳答案
最好将代码封装在一个函数中。返回列表并不难看,例如 S3 对象只是一个 列表 与 属性类 .
object <- list(attribute.name = something, ..)
class(object) <- "cname"
return (object)
您也可以使用
inst
文件夹(如 Dirk 评论中所述),因为 inst
的内容子目录将递归复制到安装目录。inst
----scripts
some_scripts.R
system.file
机制来加载它。load_myscript <- function(){
source(system.file(package='your_pkg_name','scripts/some_scripts.R'))
}
load_myscript()
关于r - 在 R 包中包含 R 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112432/