我想分享一些软件作为一个包,但我的一些脚本似乎不太适合作为函数。例如,考虑以下代码块,其中“raw.df”是包含离散和连续变量的数据框。函数“count.unique”和“squash”将在该包中定义。该脚本将数据框拆分为两个框,“cat.df”用于处理分类数据,“cts.df”用于处理连续数据。
我认为这将如何使用是用户读入数据框“raw.df”,源脚本,然后交互式地编辑“cat.df”和“cts.df”,可能组合一些类别并转换一些变量。
现在,这当然可以转换为一个函数,返回包含nvals、p、p.cat、cat.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 Eddelbuettel