首页 文章

在R包中导入鼠标功能时出错

提问于
浏览
-1

我想在我的包中包含mice :: mice函数来对我的数据进行插补 .

我使用Roxygen列出进口

#' @param data dataset to be used for imputation
#' @importFrom dplyr select_
#' @importFrom mice mice complete
#' @return A list
#' @export
#' 
impute_data <- function(data, vars, seed)
{
     data_used <- select_(data,vars)
     mice_data <- complete(mice(data_used, seed = seed))
     return(mice_data)
}

当我测试代码时,此函数工作正常,但是当我构建包并尝试使用它时,我收到以下错误

Error in check.method(setup, data) : 
  The following functions were not found: mice.impute.pmm,mice.impute.pmm, mice.impute.pmm, mice.impute.pmm, mice.impute.pmm

我试图在导入中添加错误中提到的所有函数,但它对结果没有任何影响 .

我错过了什么?我从未发现过这样的问题 .

2 回答

  • 0

    您忘记处理DESCRIPTION文件了!你只处理impute_data.R .

    您的问题非常类似于:What roxygen should I put when I use a function of another package in my function

    我在那里给了答案(请在发布任何问题之前搜索类似的问题) . 对于你的情况:

    首先,要意识到你的

    sessionInfo() 
    getwd() # your R's working directory
    .libPaths() # your R's library location
    

    Step0 下载并安装必要的软件包:

    library(roxygen2)
    library(devtools)
    library(digest)
    

    Step1 将所有相关的".R"文件(yourfunction1.R,yourfunction2.R,yourfunction3.R,impute_data.R)放入R的工作目录 .

    Step2 在运行以下命令之前,在R 's working directory: Be sure that there is no folder named 1239071 in your R'的工作目录中创建包骨架 . (来自R的控制台)

    package.skeleton(name = "yourpackage", code_files = c("yourfunction1.R", "yourfunction2.R", "yourfunction3.R", "impute_data.R"), path = ".")
    

    运行 package.skeleton 后,在R的工作目录中创建文件夹yourpackage .

    从Windows资源管理器中删除 Read-and-delete-me 文件 .
    删除YourR'sWorkingDirectory \ yourpackage \ man文件夹中的"yourpackage-package.Rd"文件
    (不要删除YourR'sWorkingDirectory \ yourpackage \ man文件夹中的"yourpackage.Rd"文件!)

    Step3 在".R"文件(impute_data.R)的序言末尾,添加以下内容(如果在步骤1中没有这样做):

    #' @importFrom mice mice
    #' @importFrom mice complete
    #' @export
    impute_data <- function(...) {...
    

    Step4 在包的 DESCRIPTION 文件中,在 Imports 部分中,添加:

    Imports:
        mice(>= VersionNumber)
    

    其中VersionNumber是您正在使用的鼠标包的版本号 . 您可以在RevolutionREnterprise的对象浏览器中右键单击任何函数(来自您的包)找到版本号;并在最终的.html帮助文件的底部 . 在那里,显示了包的版本号 .

    在Step2中,package.skeleton自动生成一个NAMESPACE文件,其内容为:

    exportPattern("^[[:alpha:]]+")
    

    不要手动处理此NAMESPACE文件 .

    Step5 roxygenize你想创造的包裹("yourpackage")

    library(roxygen2)
    roxygenize("yourpackage")
    

    在进行漫游时,yourpackage的NAMESPACE文件的内容会自动从 exportPattern("^[[:alpha:]]+") 转换为

    # Generated by roxygen2: do not edit by hand
    
    export(impute_data)
    importFrom(mice,mice)
    importFrom(mice,complete)
    

    Step6 构建你的包:
    (首先,从Windows资源管理器中删除YourR'sWorkingDirectoryFolder \ yourpackage文件夹中的"src-i386"和"src-x64"文件夹(如果有))
    (再次确保YourR'sWorkingDirectory \ yourpackage \ man文件夹中没有"yourpackage-package.Rd"文件 . 如果有,请在构建之前删除它)

    build("yourpackage")
    

    Step7 安装包裹:

    install("yourpackage")
    

    Step8 通过加载包并在包中运行一个函数来检查一切顺利 .

    library(yourpackage)
    impute_data(a,b,1235) # "impute_data" is the function in the package "yourpackage"
    

    Step9 检查您的包装是否可以装载到CRAN(Comprehensive R Archieve Network)(如果您想共享包裹):

    (首先,从Windows资源管理器中删除YourR'sWorkingDirectoryFolder \ yourpackage文件夹中的"src-i386"和"src-x64"文件夹(如果有))
    (再次确保YourR'sWorkingDirectory \ yourpackage \ man文件夹中没有"yourpackage-package.Rd"文件 . 如果有,请在检查前将其删除)

    从DOS命令提示符:
    开始 - cmd - 输入 . 传递给R 's working directory (your R'的工作目录是通过getwd()知道的并且做CRAN检查:

    cd C:\Users\User\Documents\Revolution
    R CMD check yourpackage
    

    从R的控制台:

    devtools::check("C:/Users/User/Documents/Revolution/yourpackage")
    
  • 0

    您好,即使帖子较旧,

    最近,我遇到了同样的问题,Erdogan CEVHER和mickkk提出的解决方案对我没有用 . 我通过主动加载鼠标包来解决它,同时加载我自己的包 . 有关更多详细信息,请参阅R-Package-Dependencies .

    除了包开发期间所需的步骤之外,我还建议:

    Part 1: 将鼠标添加到包的DESCRIPTION文件中的 Depends:not Import: )字段 .

    Depends: mice (>= VERSIONNUMBER)
    

    Part 2: 在NAMESPACE中使用 import(mice) (仅适用于 devtools::check()

    import(mice)
    

    Part 3: 例如,使用 mice:: 引用每个函数

    mice::mice(data, method="pmm")
    

相关问题