R: назначение тестов программным функциям - PullRequest
2 голосов
/ 07 сентября 2011

Я расширяю сценарий doSvUnit.R , чтобы он включал примеры в свой отчет.

Одним начальным шагом в задаче является привязка теста к функции, гдеимя функции находится в переменной.(Моя настоящая тестовая функция не только checkTrue, она вызывает примеры для функции с именем funcName. Я здесь только показываю концепцию.)

> funcName <- "double.threshold"
> test(get(funcName)) <- function() checkTrue(TRUE)
Error in test(get(funcName)) <- function() checkTrue(TRUE) : 
  could not find function "get<-"
>

или даже

> test(get("double.threshold")) <- function() checkTrue(TRUE)
Error in test(get("double.threshold")) <- function() checkTrue(TRUE) : 
  target of assignment expands to non-language object
>

Я не понимаю причину каждого сообщения об ошибке, и я не понимаю, почему я получаю два разных сообщения об ошибке для того, что я вижу как одно и то же.

благодаря второму сообщению об ошибке,Я нашел обходной путь , сохранив функцию в объекте, но я не понимаю, почему это необходимо, и я не уверен, что это специфично для svUnit .

> f <- get(funcName)
> test(f) <- function() checkTrue(TRUE)
> 

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Раздел 3.4.4 в Справочнике по языку R объясняет, как работает (под) присваивание.

В частности, пример на names показывает, как R интерпретирует операторы с вызовами вложенных функций (наслева) и присваивание.

По существу (упрощенное, но достаточно точное для большинства обстоятельств), оно показывает, что для каждой функции слева требуется версия присвоения.

Обратите внимание, что одни и те же проблемы волнуют многих людей в разных ситуациях: см. замечательный ответ Гэвина Симпсона на один из моих собственных вопросов, который открыл мне глаза на то, что происходит за кулисами.

0 голосов
/ 07 сентября 2011

Я тоже сомневаюсь, что это специфично для svUnit.Он говорит вам, что анализатор ищет get<- функцию и не может ее найти.

> ttt <- function(x) x+2
> fname <- "ttt"
> body(ttt ) <- quote(x+4)
> ttt
function (x) 
x + 4

Эта операция выполнена успешно, но эта операция не выполнена:

> body(get(fname) ) <- quote(x+4)
Error in body(get(fname)) <- quote(x + 4) : 
  could not find function "get<-"
...