gpt4 book ai didi

r - 在 S4 中编写函数并使用 roxygen2 时开发 R 包

转载 作者:行者123 更新时间:2023-12-05 01:02:54 36 4
gpt4 key购买 nike

我从 An R Companion to Applied Regression - Chapter 8 中获取了以下代码.除了 R 之外,一切正常代码写在 S4 .当我构建文档时,我收到 lreg5-class.Rd而不是 lreg5.Rd并且无法获得 lreg5功能。这是我第一次尝试构建 R包裹。
lreg5 函数

#' An S4 class to Logistic Regression.
#'
#' @export
#'
#' @slot coefficients Coefficients
#' @slot var Variance Covariance Matrix
#' @slot deviance Deviance
#' @slot predictors Predictors of the model
#' @slot iterations No of iterations for convergence

setClass(
Class = "lreg5"
, slots = list(
coefficients="numeric"
, var="matrix"
, deviance="numeric"
, predictors="character"
, iterations="numeric"
)
)


lreg5 <-
function(X, y, predictors=colnames(X), max.iter=10,
tol=1E-6, constant=TRUE, ...) {
if (!is.numeric(X) || !is.matrix(X))
stop("X must be a numeric matrix")
if (!is.numeric(y) || !all(y == 0 | y == 1))
stop("y must contain only 0s and 1s")
if (nrow(X) != length(y))
stop("X and y contain different numbers of observations")
if (constant) {
X <- cbind(1, X)
colnames(X)[1] <- "Constant"
}
b <- b.last <- rep(0, ncol(X))
it <- 1
while (it <= max.iter){
p <- as.vector(1/(1 + exp(-X %*% b)))
var.b <- solve(crossprod(X, p * (1 - p) * X))
b <- b + var.b %*% crossprod(X, y - p)
if (max(abs(b - b.last)/(abs(b.last) + 0.01*tol)) < tol) break
b.last <- b
it <- it + 1
}
if (it > max.iter) warning("maximum iterations exceeded")
dev <- -2*sum(y*log(p) + (1 - y)*log(1 - p))
result <- new("lreg5", coefficients=as.vector(b), var=var.b,
deviance=dev, predictors=predictors, iterations=it)
result
}

setMethod("show", signature(object="lreg5"),
definition=function(object) {
coef <- object@coefficients
names(coef) <- object@predictors
print(coef)
}
)


setMethod("summary", signature(object="lreg5"),
definition=function(object, ...) {
b <- object@coefficients
se <- sqrt(diag(object@var))
z <- b/se
table <- cbind(b, se, z, 2*(1-pnorm(abs(z))))
colnames(table) <- c("Estimate", "Std.Err", "Z value", "Pr(>z)")
rownames(table) <- object@predictors
printCoefmat(table)
cat("\nDeviance =", object@deviance,"\n")
}
)

包装
# Step 0: Packages you will need
library(devtools)
library(roxygen2)

# Step 1: Create your package directory
setwd("WD")

create("PackageName")


# Step 2: Add functions

# Step 3: Add documentation

# Step 4: Process your documentation
setwd("./PackageName")
devtools::document()

# Step 5: Install!
setwd("..")
#load_all("PackageName")
devtools::install("PackageName")

# Stp 6: Load the Package!
library(PackageName)
help(PackageName)

最佳答案

一些提示:

  • 首先,将类定义和函数放在不同的文件中。这将帮助 roxygen 在正确的 .Rd 文档中获得所有内容
  • 其次,使用可以帮助您完成此过程的编辑器。我很高兴使用 RStudio,因为它包含了所有构建工具(包括 roxygen2)。看看documentation of RStudio了解更多信息。
  • 第三,没有roxygen2您在此处显示的代码中的命令。你至少需要做一些努力。 roxygen 系统允许您在 .R 文件本身中注释您的函数,并根据这些注释生成帮助文件。但是如果没有评论,你就不会产生太多的东西。

  • 更具体一点:

    您可以使用 roxygen 标签 @rdname 定义哪些信息将发送到哪个 .Rd 文件。 .如果我想将某些内容组合在一个文件中,但将信息分散到不同的 .Rd 文件中,我会使用它。另一种选择是 @describeIn ,这是最近推出的。后一个标签允许您指定必须在哪个 .Rd 文件中描述某个函数/类/...。

    有关更多信息,请参阅此 vignette on creating .Rd files using roxygen2

    我强烈建议您查看不同的小插图以获取一些想法。使用 roxygen2 记录 S4 类和方法并不像人们希望的那样微不足道,但这绝对是可行的。举个例子,看看例如 Bioconductor 包 unifiedWMWqPCR .我已经研究过那个并使用 roxygen2对于基于 S4 的包。源码可以从以下链接下载:

    http://www.bioconductor.org/packages/release/bioc/html/unifiedWMWqPCR.html

    关于r - 在 S4 中编写函数并使用 roxygen2 时开发 R 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569870/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com