我正在尝试使用该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)
Run Code Online (Sandbox Code Playgroud)
返回此错误:
设计错误(eval.parent(m)):找不到选项的数据集ddist(datadist =)
即使print(ddist)工作,选项("datadist")返回适当的变量.是否testthat有导致错误的不同变量范围?
我在我的包dir(Eclipse StatET)中启动了一个R控制台运行testthat:
library(testthat)
test_dir("inst/tests")
q()
Run Code Online (Sandbox Code Playgroud)
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"))
})
Run Code Online (Sandbox Code Playgroud)
如果您碰巧在以下范围内进行分配,这也适用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"))
})
Run Code Online (Sandbox Code Playgroud)
这也相当于下面的代码(也许更容易理解):
env <- globalenv() # Grab the global environment
env$dd <- datadist(ds) # Assign the datadist to it
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关环境如何工作的更多信息,我可以推荐 Hadley 对该主题的优秀高级 R 报道。我发现这解释了我遇到的许多问题。
是的,正如错误所暗示的那样,这是一个范围问题。
一个可能的解决方法是定义您的ds呼叫位置test_dir
例如您创建文件,runtest.R如下所示
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")
library(testthat)
test_dir("inst/tests")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |