6

パッケージを使用して単体テストを実行しようとしてい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)

このエラーを返します:

Design(eval.parent(m))のエラー:options(datadist =)のデータセットddistが見つかりません

これは、print(ddist)が機能し、options( "datadist")が適切な変数を返したとしてもです。testthatエラーの原因となる別の変数スコープがありますか?

アップデート

パッケージディレクトリ(Eclipse StatET)で開始されたRコンソールでテストを実行します。

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

RCMDチェック--as-cranでも同じエラーが発生します

4

2 に答える 2

5

@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の優れたAdvancedRカバレッジをお勧めします。私はこれが私が遭遇した問題の多くを説明しているのを見つけました。

于 2014-08-02T14:50:45.170 に答える
2

はいエラーで示唆されているように、スコープの問題です。

考えられる回避策は、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")
于 2012-12-30T19:49:15.580 に答える