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

时间:2016-06-01 22:21:29

标签: r r-package r-mice

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

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

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

1 个答案:

答案 0 :(得分: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 将您所有相关的&#34; .R&#34;文件(yourfunction1.R,yourfunction2.R,yourfunction3.R,impute_data.R)到你的R工作目录。

Step2 在R的工作目录中创建您的包骨架: 确保没有名为&#34; yourpackage&#34;的文件夹。在运行以下命令之前,在R的工作目录中。 (来自R&#39的控制台)

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

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

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

Step3 在你的&#34; .R&#34;的序言结束时文件(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 为您想要创建的包裹(&#34; yourpackage&#34;)

library(roxygen2)
roxygenize("yourpackage")

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

# Generated by roxygen2: do not edit by hand

export(impute_data)
importFrom(mice,mice)
importFrom(mice,complete)

Step6 构建您的软件包:
(首先,从Windows资源管理器中删除YourR&#39; sWorkingDirectoryFolder \ yourpackage文件夹中的&#34; src-i386&#34;以及&#34; src-x64&#34;文件夹(如果有) (再次确保YourR&#39; sWorkingDirectory \ yourpackage \ man文件夹中没有&#34; yourpackage-package.Rd&#34;文件。如果有,请在构建之前将其删除)

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&#39; sWorkingDirectoryFolder \ yourpackage文件夹中的&#34; src-i386&#34;以及&#34; src-x64&#34;文件夹(如果有)) (再次确保YourR&#39; sWorkingDirectory \ yourpackage \ man文件夹中没有&#34; yourpackage-package.Rd&#34;文件。如果有,请在检查前将其删除)

从DOS命令提示符:
开始 - cmd - 输入。转到R的工作目录(您的R工作目录通过getwd()知道)并进行CRAN检查:

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

来自R&#39的控制台:

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