Ich bin neu in R-Paket-Entwicklung und Stack-Überlauf, aber ich konnte diese Informationen nirgendwo finden.Load r-Paket in ausgewählten Umgebung
Ich versuche, die R-Paket-Mäuse zu laden, ohne dass es meinen Namensraum verschmutzt. Ich habe versucht, nur die Funktionen zu importieren, die ich verwende, aber das hat nicht funktioniert. Also werde ich regeln für das gesamte Paket in einer bestimmten Umgebung laden Sie wie folgt vor:
e <- new.env()
load_package_into_environment(e, package = "mice")
eval(mice(data, m = m, maxit = max.iter, printFlag = F), envir = e)
Allerdings habe ich nicht in der Lage, die eigentliche Funktion zu finden, die „load_package_into_environment“ Platzhalter zu ersetzen. Welche Funktion würde dies gegebenenfalls erfüllen?
EDIT: Hier sind die Dateien, mit denen ich arbeite und das Problem muss ich mehr Details geben.
File: BESCHREIBUNG
Package: bug.example2
Title: Example of Package Loading Bug
Version: 0.0.0.9000
[email protected]: 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
File: NAMSPACE (automatisch von roxygen erzeugt)
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)
File: impute.R (verwendet die Maus-Funktion aus dem Mäuse-Paket)
#' @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
}
Datei: Test-impute.R (verwendet testthat Paket impute Funktion zu testen) aus
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")
})
Fehlerausgang 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 = ", ")))
Ein Paket * wird * in eine dedizierte Umgebung geladen. Was meinst du mit "Verschmutzung"? – nicola
'ImportFrom' war mein erster Ansatz, aber ich habe die eine Funktion importiert ich alle und alle abhängigen Funktionen davon aufrufen, aber ich bekomme immer noch eine Nachricht, dass einige dieser abhängigen Funktionen nicht gefunden werden, wenn ich versuche, das Paket zu bauen. Ich denke, es ist ein Ergebnis davon, wie Mäuse gebaut werden. –
Bitte lesen Sie http://stackoverflow.com/a/40830959/4468078 und lesen Sie über das 'import' Paket, das (fast) genau das tut, was Sie wollen. Das einzige, was ich noch nicht ausprobiert habe, ist, ob Sie Ihre eigene Umgebung erstellen können, anstatt den Namen der neuen Umgebung anzugeben. Ein weiterer Unterschied könnte sein, dass 'import' die Umgebung in den Suchpfad einfügt, was nicht möglich ist, was Sie wollen (und Sie können es beheben, indem Sie es entfernen). –