2017-02-22 18 views
1

У меня есть один пакет (скажем testpackage1), который содержит метод, называемый readData().Как импортировать данные из другого пакета

Этот метод считывает файл test.data.rda, который помещается в папку данных testpackage1 и после некоторых операций возвращает фрейм данных.

Это единственный R файл в 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) 
} 

Вызов метода initPackage создает фрейм данных и сохраняет его в качестве .rda файла в папке данных.

Теперь я создал второй пакет с именем testpackage2, который также имеет только один R файл:

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

Я построил оба пакета, а затем начал свежий R сессии и напечатал:

> library(testpackage2) 
> hello() 

Но у меня есть эта ошибка:

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() 

Если я печатаю require(testpackage1) BEF рудный метод вызова hello(), то он работает.

Но я думал, что загрузка testpackage2 автоматически загрузила бы его зависимости. Я мог бы добавить require(testpackage1) в функцию hello(), но он кажется лишним с оператором @import.

Кроме того, readData() Правильно импортирован, почему бы не данные? Должен ли я каким-то образом экспортировать данные?

ответ

0

Не уверен, если это ошибка или особенность, но я сделал его работу, изменяя метод readData() в testpackage1 следующим образом:

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

Обратите внимание на testpackage1::test.data

 Смежные вопросы

  • Нет связанных вопросов^_^