Mur*_*sen 5 r function package
我想将一些软件作为一个软件包共享,但我的一些脚本似乎并不像函数那样自然.例如,考虑以下代码块,其中'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")
}
Run Code Online (Sandbox Code Playgroud)
现在,这可以成为一个函数,返回一个包含nvals,p,p.cat,cat.df等的列表; 然而这对我来说似乎相当难看.但是,在程序包中包含脚本的唯一规定似乎是"demo"文件夹,这似乎不是正确的方法.将非常感激地收到关于如何进行的建议.
(但感谢不会被正式表达,因为似乎不赞成使用评论来表达感谢.)
最好将代码封装在函数中。返回一个列表并不难看,例如 S3 对象只是一个带有属性 class的列表。
object <- list(attribute.name = something, ..)
class(object) <- "cname"
return (object)
Run Code Online (Sandbox Code Playgroud)
您还可以使用inst文件夹(如 Dirk 评论中所述),因为子目录的内容inst将递归复制到安装目录。
您创建一个 inst 文件夹:
inst
----scripts
some_scripts.R
Run Code Online (Sandbox Code Playgroud)您可以从包中的函数调用它并使用system.file机制来加载它。
load_myscript <- function(){
source(system.file(package='your_pkg_name','scripts/some_scripts.R'))
}
Run Code Online (Sandbox Code Playgroud)您可以像包中的任何其他函数一样调用它:
load_myscript()
Run Code Online (Sandbox Code Playgroud)