【问题标题】:Error while importing mice functions in R package在 R 包中导入鼠标功能时出错
【发布时间】:2016-06-01 22:21:29
【问题描述】:

我想在我的包中包含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 

我尝试将错误中提到的所有函数添加到导入中,但对结果没有任何影响。

我错过了什么?我从来没有发现过这样的问题。

【问题讨论】:

    标签: r r-package r-mice


    【解决方案1】:

    您忘记处理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 的工作目录中创建包骨架: 在运行以下命令之前,请确保 R 的工作目录中没有名为“yourpackage”的文件夹。 (来自 R 的控制台)

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

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

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

    Step3 在“.R”文件 (impute_data.R) 的序言​​末尾,输入以下内容(如果您在 Step1 中没有这样做):

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

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

    Imports:
        mice(>= VersionNumber)
    

    其中 VersionNumber 是您正在使用的鼠标包的版本号。您可以通过在RevolutionREnterprise的对象浏览器中右键单击任何功能(来自yourpackage)找到版本号;并进入生成的 .html 帮助文件的底部。那里会显示软件包的版本号。

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

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

    不要手动处理这个 NAMESPACE 文件。

    Step5 roxygenize 你想要创建的包(“yourpackage”)

    library(roxygen2)
    roxygenize("yourpackage")
    

    在 roxygenization 时,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(综合 R 归档网络)(如果您想共享您的包):

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

    从 DOS 命令提示符:
    开始——cmd——回车。传递到 R 的工作目录(您的 R 的工作目录通过 getwd() 知道)并进行 CRAN 检查:

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

    从 R 的控制台:

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

    【讨论】:

    • 嗨,我正在使用 RStudio,所有这些东西要么默认处理,要么已经处理(由我),很抱歉我忘了在问题中添加这个。这根本不起作用。但我找到了解决方案,显然,mice 包要求您在文档中设置“@importMethodsFrom mouse”。这将使它工作。
    • 一点更正,显然我找到的解决方案不起作用...我通过每次引用命名空间mice 找到了更好的解决方案。例如:mice::complete,mice::mice。不优雅,但它有效。
    【解决方案2】:

    您好,即使帖子较旧,

    最近,我遇到了同样的问题,并提出了解决方案 Erdogan CEVHER 和 mickkk 对我不起作用。我通过主动加载mice包解决了这个问题,同时加载了我自己的包。更多详细信息请咨询R-Package-Dependencies

    除了包开发过程中需要的步骤外,这里是我推荐的:

    第 1 部分:将鼠标添加到包的说明文件中的 Depends:not Import:)字段。

    Depends: mice (>= VERSIONNUMBER)
    

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

    import(mice)
    

    第 3 部分: 使用 mice:: 引用每个函数,例如

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

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多