Я новичок в разработке пакетов R и переполнении стека, но нигде не смог найти эту информацию.
Я пытаюсь загрузить мыши пакета R, не загрязняя при этом мое пространство имен. Я пытался импортировать только те функции, которые использую, но это не сработало. Поэтому я соглашусь на загрузку всего пакета в одной конкретной среде следующим образом:
e <- new.env()
load_package_into_environment(e, package = "mice")
eval(mice(data, m = m, maxit = max.iter, printFlag = F), envir = e)
Однако мне не удалось найти фактическую функцию для замены заполнителя «load_package_into_environment». Какая функция, если таковая имеется, могла бы выполнить это?
EDIT: Вот файлы, с которыми я работаю, и проблема, которую я должен описать более подробно.
Файл: ОПИСАНИЕ
Package: bug.example2
Title: Example of Package Loading Bug
Version: 0.0.0.9000
Authors@R: person("R", "Woodbridge", email = "[email protected]", role = c("aut", "cre"))
Description: Creates a wrapper function for mice::mice function.
Depends:
R (>= 3.2.3),
data.table (>= 1.9.6)
License:
LazyData: true
Imports: mice
RoxygenNote: 5.0.1
Файл: NAMSPACE (автоматически создан roxygen)
import(data.table)
importFrom(mice,mice)
importFrom(mice,mice.impute.logreg)
importFrom(mice,mice.impute.pmm)
importFrom(mice,mice.impute.polr)
importFrom(mice,mice.impute.polyreg)
Файл: impute.R (использует функцию mouses из пакета mouses)
#' @import data.table
#' @importFrom mice mice
#' @importFrom mice mice.impute.pmm
#' @importFrom mice mice.impute.logreg
#' @importFrom mice mice.impute.polyreg
#' @importFrom mice mice.impute.polr
#' @export
impute <- function(data, m = 5, max.iter = 5){
mice_environment <- new.env()
#Impute missing data using mice function, output format is mids object
mice.out <- mice(data, m = m, maxit = max.iter, printFlag = F)
#save the m imputed data.frames as a list of data.tables
return.list <- lapply(1:m, function(x){
as.data.table(complete(mice.out, x))
})
names(return.list) <- paste0("imp.",1:m)
return.list
}
Файл: test-impute.R (использует пакет testthat для проверки функции вменения)
context("Impute missing values")
test_that("Output format is a list of lenght m and each element is a data.table",{
#Set up data
set.seed(200)
data <- iris
data$Species[runif(nrow(data)) < .1] <- NA
data$Sepal.Width[runif(nrow(data)) < .2] <- NA
setDT(data)
#Create imputed data
M <- 5
impute.output <- impute(data, m = M)
#Test output format
expect_is(impute.output, "list")
expect_equal(length(impute.output), M)
lapply(impute.output,expect_is, "data.table")
})
Вывод ошибки из testthat
1. Error: Output format is a list of lenght m and each element is a data.table -
The following functions were not found: mice.impute.pmm, mice.impute.polyreg
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls, message = function(c) invokeRestart("muffleMessage"))
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: impute(data, m = M) at test-impute.R:12
5: mice(data, m = m, maxit = max.iter, printFlag = F) at C:\repos\bug.example2/R/impute.R:11
6: check.method(setup, data)
7: stop(paste("The following functions were not found:", paste(fullNames[notFound],
collapse = ", ")))
importFrom
был моим первым подходом, но я импортировал одну функцию, которую я вызываю для всех и всех ее зависимых функций, но я все еще получаю сообщение о том, что некоторые из этих зависимых функций не найдены, когда я пытаюсь собрать пакет. Я думаю, это результат того, как устроены мыши. - person r.woodbridge   schedule 17.03.2016import
, который (почти) точно делает то, что вы хотите . Единственное, что я еще не пробовал, это можно ли создать свою среду вместо указания имени новой среды. Еще одно отличие может заключаться в том, чтоimport
прикрепляет среду к пути поиска, что возможно не то, что вы хотите (и вы можете исправить, отсоединив ее). - person R Yoda   schedule 27.11.2016