4

私が構築しているパッケージには、アナリストが使用するグローバル環境に 16 進コードを割り当てる機能があります...

optiplum<-function(){
  assign(
    x="optiplum",
    value=rgb(red=129,green=61,blue=114, maxColorValue = 255),
    envir=.GlobalEnv)
  }

私の単体テストコードは次のとおりです。

test_that("optiplum - produces the correct hex code",{
 optiplum()
  expect_true(identical(optiplum,"#813D72"))
})

コードを手動で実行すると、エラーは発生しません。

> str(optiplum)
 chr "#813D72"
> str("#813D72")
 chr "#813D72"
> identical("#813D72",optiplum)
[1] TRUE
> expect_true(identical(optiplum,"#813D72"))

test_file() を実行してもエラーにはなりません

> test_file("./tests/testthat/test-optiplum.R")
optiplum : .

ただし、devtools ワークフローの一部としてテストを実行すると、次のようになります。

> test()
Testing optINTERNAL
Loading optINTERNAL
optiplum : 1


1. Failure: optiplum - produces the correct hex code --------------------------------------------------------------------------------------------------------------
identical(optiplum, "#813D72") isn't true

なぜこれが起こっているのか、どうすれば状況を解決できるのか、誰にもアイデアがありますか?

4

1 に答える 1

1

グローバル環境への割り当ては禁止されています。R Infernoと test を参照して、テストを可能な限り分離します (詳細をtest_that()参照)。結果として、optiplum()グローバル環境への割り当ては成功しません。これは、testthat 関数がそのような動作を厳密に禁止しているためです。

@Hadley は、関数が文字列を代入するのではなく、文字列を返すだけであることを正しく指摘しています。

そうではない

optiplum<-function(){
  assign(
    x="optiplum",
    value=rgb(red=129,green=61,blue=114, maxColorValue = 255),
    envir=.GlobalEnv)
  }

しかし

optiplum <- function() rgb(red=102,green=17,blue=109, maxColorValue = 255)
于 2014-05-02T14:12:08.060 に答える