r - 在 R 包中包含 R 脚本

标签 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")
}

现在这当然可以变成一个函数,返回一个包含 nvals、p、p.cat、cat.df 等的列表;然而,这对我来说似乎相当难看。然而,在包中包含脚本的唯一规定似乎是“演示”文件夹,这似乎不是正确的方法。我们将不胜感激地收到有关如何进行的建议。

(但不会正式表达感谢,因为似乎不推荐使用评论来表达感谢。)

最佳答案

最好将代码封装在一个函数中。返回列表并不难看,例如 S3 对象只是一个 列表 属性类 .

object <- list(attribute.name = something, ..)
class(object) <- "cname"
return (object)

您也可以使用inst文件夹(如 Dirk 评论中所述),因为 inst 的内容子目录将递归复制到安装目录。
  • 您创建一个 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/

    相关文章:

    c - 简单的 C 函数调用

    r - 将附加参数传递给 pracma::integral2

    r - 在频率表中包括零频率以获取李克特数据

    R data.table 范围,使用变量可靠地引用未知列名

    r - 函数从 R 控制台运行,但内置到包中时失败

    python - 在不运行Python包的情况下检查它的内容?

    package - Ada:如何组织嵌套包

    r - 如何在 R 中计算此数据框的差异

    r - 如何重复代码更改 R 中序列中的变量

    c - realloc 是否更改指针地址?