gpt4 book ai didi

r - 通过调用 datadist() + options() 设置 rms 时测试失败

转载 作者:行者123 更新时间:2023-12-01 22:29:38 24 4
gpt4 key购买 nike

我正在尝试使用 testthat 包进行一些单元测试,但我似乎无法让它与 rms 包一起正常工作。下面的例子:

library(rms)
set.seed(10)
ds <- data.frame(
ftime = rexp(200),
fstatus = sample(0:1,200,replace=TRUE),
x1 = runif(200),
x2 = runif(200),
x3 = factor(sample(LETTERS[1:3], size=200, replace=TRUE)))


ddist <- datadist(ds)
options(datadist="ddist")

s <- Surv(ds$ftime, ds$fstatus == 1)
fit <- cph(s ~ x1 + x2 + x3, data=ds)

返回此错误:

Error in Design(eval.parent(m)) : dataset ddist not found for options(datadist=)

即使 print(ddist) 有效并且 options("datadist") 返回正确的变量也是如此。 testthat 是否具有导致错误的不同变量范围?

更新

我运行由 R 控制台在我的包目录 (Eclipse StatET) 中启动的测试:

library(testthat)
test_dir("inst/tests")
q()

R CMD 检查 --as-cran 也会出现同样的错误

最佳答案

虽然@agstudy的建议是正确的,但我已经通过使用将变量分配给全局环境的<<-运算符找到了解决该错误的简单方法,这是一个有效的测试文件:

set.seed(10)
n <- 11
ds <- data.frame(
y = rnorm(n),
x1 = factor(sample(c("a", "aa", "aaa"), size = n, replace = TRUE)))

suppressMessages(library(rms))
dd <<- datadist(ds)
options(datadist = "dd")

context("rms")
test_that("test", {
fit <- ols(y ~ x1, data=ds)
s <- summary(fit)
expect_true(inherits(s, "summary.rms"))
})

如果您碰巧在 test_that 中进行分配,这也适用:

context("rms")
test_that("test", {
set.seed(10)
n <- 11
ds <- data.frame(
y = rnorm(n),
x1 = factor(sample(c("a", "aa", "aaa"), size = n, replace = TRUE)))

suppressMessages(library(rms))
dd <<- datadist(ds)
options(datadist = "dd")

fit <- ols(y ~ x1, data=ds)
s <- summary(fit)
expect_true(inherits(s, "summary.rms"))
})

这也相当于下面的代码(也许更容易理解):

env <- globalenv() # Grab the global environment
env$dd <- datadist(ds) # Assign the datadist to it

如果您想了解有关环境如何工作的更多信息,我可以推荐 Hadley 出色的高级 R 报道 topic 。我发现这解释了我遇到的许多问题。

关于r - 通过调用 datadist() + options() 设置 rms 时测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14090973/

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