Теперь я могу ответить на оригинальный вопрос и тот, который я задал Конраду.Функция 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>
(я не уверен, что это отвечает на любые изменения в поведении по сравнению с предыдущими версиями пакета мышей. Для этого сначала нужно перейти к 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()