我一直在使用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()
功能是否由于某种原因而删除了,或者我的系统有问题吗?
答案 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()