2017-02-22 17 views
1

Ich habe ein Paket (z. B. testpackage1), die eine Methode namens readData() enthält.So importieren Sie Daten aus einem anderen Paket

Diese Methode liest eine test.data.rda-Datei, die in den Datenordner testpackage1 platziert wird und nach einigen Operationen einen Datenrahmen zurückgibt.

Dies ist die einzige R-Datei in testpackage1:

#' Reads data and transforms it 
#' 
#' @return a data.frame 
#' @export 
#' 
#' @examples my.df <- readData() 
readData <- function() { 
    return(subset(test.data, x < 50)) 
} 

initPackage <- function() { 
    test.data <- data.frame(x = seq(1, 100), 
          y = seq(101, 200)) 
    devtools::use_data(test.data, overwrite = TRUE) 
} 

Aufruf der initPackage Methode erstellt der Datenrahmen und speichert sie als .rda Datei im Datenordner.

Jetzt habe ich ein zweites Paket erstellt namens testpackage2, die auch nur ein R-Datei hat:

#' Gets the data 
#' 
#' @import testpackage1 
#' @export 
#' 
#' @examples hello() 
hello <- function() { 
    print(testpackage1::readData()) 
} 

ich beiden Pakete gebaut, dann eine neue R-Sitzung gestartet und tippe:

> library(testpackage2) 
> hello() 

aber ich habe diesen Fehler:

Error in subset(test.data, x < 50) : object 'test.data' not found 
4. subset(test.data, x < 50) at hello.R#8 
3. testpackage1::readData() 
2. print(testpackage1::readData()) at hello.R#8 
1. hello() 

Wenn ich require(testpackage1) bef Typ Erz Aufruf Methode hello(), dann funktioniert es.

Aber ich dachte, Laden testpackage2 hätte automatisch seine Abhängigkeiten geladen. Ich könnte hinzufügen require(testpackage1) in der hello() Funktion, aber es scheint redundant mit der @import-Anweisung.

Darüber hinaus ist die readData() IS korrekt importiert, warum nicht die Daten? Soll ich die Daten auch irgendwie exportieren?

Antwort

0

nicht sicher, ob dies ein Bug oder ein Feature ist, aber ich habe es funktioniert, indem die readData() Methode in testpackage1 wie folgt zu ändern:

#' Reads data and transforms it 
#' 
#' @return a data.frame 
#' @export 
#' 
#' @examples my.df <- readData 
readData <- function() { 
    return(subset(testpackage1::test.data, x < 50)) 
} 

Notiere die testpackage1::test.data

Verwandte Themen