2014-12-08 1 views
4

Я пытаюсь написать свой первый пакет R. Функции в пакете зависят от функции getURL() из пакета RCurl. Я последовал за учебники по: http://r-pkgs.had.co.nz/ и http://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/Создайте пакет R с зависимостями

Я установил RTools, DevTools и roxygen2 для написания документации и построения пакета.

Название моей упаковки - «waterml». В моем пакете у меня есть папка R с 3 файлами GetSites.R, GetVariables.R, GetValues.R. Каждый файл имеет одну функцию:

#' GetSites 
#' @import XML 
#' @importFrom RCurl getURL 
#' This function gets the table of sites from the WaterML web service 
#' @param server The URL of the web service ending with .asmx, 
#' for example: http://worldwater.byu.edu/interactive/rushvalley/services/cuahsi_1_1.asmx 
#' @keywords waterml 
#' @export 
#' @examples 
#' GetSites("http://worldwater.byu.edu/interactive/rushvalley/services/cuahsi_1_1.asmx") 

GetSites <- function(server) { 
    sites_url <- paste(server, "/GetSitesObject", sep="") 
    text <- RCurl::getURL(sites_url) 
    doc <- xmlRoot(xmlTreeParse(text, getDTD=FALSE, useInternalNodes = TRUE)) 
    return(doc) 
} 

Теперь, когда я пытаюсь построить пакет:

library(devtools) 
document() 

Стадию документ() завершается без ошибок. Теперь я бегу:

setwd("..") 
install("waterml") 

Но я получаю ошибку:

* installing *source* package 'waterml' ... 
** R 
** preparing package for lazy loading 
Error : object 'function' is not exported by 'namespace:RCurl' 
ERROR: lazy loading failed for package 'waterml' 
* removing 'C:/Program Files/R/R-3.1.2/library/waterml' 

Когда я проверил мой файл NAMESPACE, он содержит какие-то странные строки:

# Generated by roxygen2 (4.0.2.9000): do not edit by hand 

export(GetSites) 
export(GetValues) 
export(GetVariables) 
import(RCurl) 
import(XML) 
importFrom(RCurl,"function") 
importFrom(RCurl,This) 
importFrom(RCurl,WaterML) 
importFrom(RCurl,data) 
importFrom(RCurl,from) 
importFrom(RCurl,getURL) 
importFrom(RCurl,gets) 
importFrom(RCurl,of) 
importFrom(RCurl,series) 
importFrom(RCurl,service) 
importFrom(RCurl,sites) 
importFrom(RCurl,table) 
importFrom(RCurl,the) 
importFrom(RCurl,time) 
importFrom(RCurl,values) 
importFrom(RCurl,variables) 
importFrom(RCurl,web) 

Я думаю, что ошибка в официальном заявлении:

importFrom(RCurl, "function") 

Какие-нибудь идеи могут быть проблемой? Я использую @importFrom в документации моей функции правильно?

ответ

5

Изменение:

#' GetSites 
#' @import XML 
#' @importFrom RCurl getURL 
#' This function gets the table of sites from the WaterML web service 
#' @param server The URL of the web service ending with .asmx, 

To:

#' GetSites 
#' 
#' This function gets the table of sites from the WaterML web service 
#' 
#' @import XML 
#' @importFrom RCurl getURL 
#' @param server The URL of the web service ending with .asmx, 

roxygen2 читает строку следующей @importFrom и предполагая каждое слово является функция, которую вы хотите импортировать.

+0

Затем удалите '@importFrom RCUrl getURL', так как OP делает' RCurl :: getURL() ' – hadley

+0

@hadley, не лучше ли удалить RCURL ::'? Честно говоря, я даже не видел «RCurl :: getURL». Если я не понимаю, кажется, что вы предлагаете ввести неявную зависимость (т. Е. Нет «импорт (RCurl)» в NAMESPACE). – BrodieG

+0

Или, может быть, OP имеет '@ import' где-то еще? – BrodieG

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

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