В настоящее время я пишу утилиту для запуска серии тестов по набору данных. У меня есть данные в data.frame и я хотел бы запускать N тестов для каждой строки данных. (Извините, если моя терминология не все там: я использовал R всего пять часов).Итерация над списком функций в R
В моей утилите я хотел бы разделить тесты на разные файлы и в основной программе, загрузить все те тесты и запустить их один раз для каждой строки data.frame. Вот что я делаю на источник соответствующие файлы:
file.sources = list.files(pattern="validator-.*.R$")
sapply(file.sources,source,verbose = TRUE)
Это хорошо работает, и если я делаю это в каждом согласованного файла:
b <- function(a) {
if(grep("^[[:blank:]]*$", a)) {
return(FALSE)
} else {
return(TRUE)
}
test.functions <- append(test.functions, b)
Тогда я в конечном итоге с test.function
списка, который точно содержат все тестовые функции для запуска, но теперь это место, где я застреваю. Я пробовал варианты sapply()
, и я думаю, что do.call()
также уместен в этом. Это моя нынешняя попытка:
process.entry <- function(a) {
lapply(test.functions,do.call,a)
}
sapply(all.data,process.entry)
Моя попытка здесь было создать функцию, которая принимает одну строку данных в качестве аргумента, перебирает test.functions
и вызывает do.call()
с функцией и строки данных в качестве аргументов. Это, кажется, не работает совсем, а ошибка брошена является:
Error in FUN(X[[i]], ...) : second argument must be a list
Однако, я не совсем уверен, где происходит эта ошибка, и вполне возможно: есть и другие, уборщик, способы делать то, что я намерены!
Что такое «класс» второго аргумента? –