加载程序包后未找到功能-R

时间:2018-11-27 18:43:38

标签: r r-mice

我一直在使用R(版本3.3-3.5)中的MICE包(版本2.2-3.3)处理估算数据集。我现在正在尝试向估算的数据集添加一些变量,这些变量在历史上使用cbind.mids()可以正常工作(在这种情况下,它是Surv函数中的Surv对象变量)。由于某种原因,这不再起作用。尽管已加载mice软件包,但找不到功能cbind.mids()

最小示例:

> library(mice)
Loading required package: lattice

Attaching package: ‘mice’

The following objects are masked from ‘package:base’:

cbind, rbind

> cbind.mids()
Error in cbind.mids() : could not find function "cbind.mids"

注1:?cbind.mids仍然可以工作并找到帮助文件。仅使用mice包中的cbind()也不起作用,它将新的变量合并到mids对象,但在后续分析中不起作用。

注2:我尝试重新安装R,鼠标和Rstudio。我没有得到其他任何错误消息以作指导。

有人知道为什么会这样吗? cbind.mids()功能是否由于某种原因而删除了,或者我的系统有问题吗?

3 个答案:

答案 0 :(得分:1)

cbind.mids()cbind()包的mice函数中。在R控制台中,编写?cbind,然后从mice包中选择一个,然后在底部(另请参见)单击cbind.mids并查看示例。您会看到函数cbind在需要时会自动执行cbind.mids。至少我非常确定这种情况,就像data.table中的合并功能是名称merge.data.table一样,但是使用该功能时您只写了merge。告诉我它是否对您有用。

编辑:尝试使用示例中的格式。如果它不起作用,则说明该功能可能不再在软件包中更新/使用了?

编辑2:mice::cbind()上的正式说明:

  

“标准base :: cbind()和base :: rbind()总是分派给   base :: cbind.data.frame()或base :: rbind.data.frame()之一   参数是一个data.frame。在mouses包中定义的版本   拦截用户命令并测试第一个参数是否具有   类“ mids”。 如果是这样,则函数分别调用cbind.mids()   rbind.mids()。在所有其他情况下,呼叫将转接到标准   基本包中的所有功能。”

答案 1 :(得分:1)

我将按照函数“ cbind.mids {mice}”的R文档中的描述使用函数“ cbind”。它也可以与Surv对象变量一起使用。

require(mice);
require(survival);

with(lung, Surv(time, status))
cbind(
  x = Surv(heart$start, heart$stop, heart$event)
  ,y = Surv(heart$start, heart$stop, heart$event));

答案 2 :(得分:1)

现在我可以回答原始问题,也可以回答康拉德。 mice函数掩盖了基本S3 cbind函数。当我加载鼠标时,已经注意到了这一点,但是我对此没有给予足够的重视。因此,在首先加载鼠标之后,对cbind的任何调用都将通过此函数(而不是通常的S3 UseMethod-dispatch)。我认为认为普通的S3派发是“蒙版”或从视图中隐藏起来比说“已损坏”更为有用:

> `cbind`
function (...) 
{
    if (is.null(attr(list(...)[[1]], "class"))) 
        return(base::cbind(...))
    if ("mids" %in% attr(list(...)[[1]], "class")) 
        return(cbind.mids(...))
    else return(base::cbind(...))
}
<bytecode: 0x1b399908>
<environment: namespace:mice>

因此,原始的S3函数就在其中,位于它们在其中定义的任何名称空间的表面之下:

> getS3method('cbind', 'mids')
Error in getS3method("cbind", "mids") : S3 method 'cbind.mids' not found
> getS3method('cbind', 'data.frame')
function (..., deparse.level = 1) 
{
    if (!identical(class(..1), "data.frame")) 
        for (x in list(...)) {
            if (inherits(x, "data.table")) 
                return(data.table::data.table(...))
        }
    data.frame(..., check.names = FALSE)
}
<bytecode: 0x51233f0>
<environment: namespace:base>

> getS3method('cbind', 'sf')
function (..., deparse.level = 1, sf_column_name = NULL) 
{
    st_sf(data.frame(...), sf_column_name = sf_column_name)
}
<bytecode: 0xb380a80>
<environment: namespace:sf>

(我不确定这是否能解决以前版本的mouse软件包中的任何行为更改。为此,请先转到news(pac='mice')

V2.41    10jul2017 SvB
ADDED    New feature: `where`argument to mice
ADDED    New `wy` argument to imputation functions
ADDED    New mice.impute.2l.sys(), author Shahab Jolani
UPDATE   Many simplifications and code enhancements
FIXED    Broken cbind() function

它没有说明mice::cbind函数以何种方式中断或分成几段。

V2.33    11apr2017 SvB
CHANGED  Stylistic changes to mice function (thanks Ben Ogorek)
CHANGED  calls to cbind.mids() replaced by calls to cbind()