cor
проверяет, является ли data.frames
(с использованием is.data.frame
- который data.table возвратит TRUE, а), а затем принуждают аргумент в матрицу
if (is.data.frame(x)) x <- as.matrix(x)
Проблема, как представляется, различные способы as.matrix.data.table
и as.matrix.data.frame
работа с матрицей, например
as.matrix(dt)
возвращает матрицу символов - это будет appea г быть ошибка в data.table
as.matrix.data.table
и as.matrix.data.frame
по всей видимости, имеют схожий код для принуждать, что диспетчерская иначе
# data.table:::as.matrix.data.table
else if (non.numeric) {
for (j in seq_len(p)) {
if (is.character(X[[j]]))
next
xj <- X[[j]]
miss <- is.na(xj)
xj <- if (length(levels(xj)))
as.vector(xj)
else format(xj)
is.na(xj) <- miss
X[[j]] <- xj
}
}
## base::as.matrix.data.frame
else if (non.numeric) {
for (j in pseq) {
if (is.character(X[[j]]))
next
xj <- X[[j]]
miss <- is.na(xj)
xj <- if (length(levels(xj)))
as.vector(xj)
else format(xj)
is.na(xj) <- miss
X[[j]] <- xj
}
}
В настоящее время версия data.table
принуждают логический столбец символа.
Вы правы, вот что происходит. Преобразование столбцов 'dt' в матрицу по отдельности (например,' as.matrix (dt [, 2, with = FALSE]) 'действительно дает правильное преобразование в исходный класс переменных. Предлагает, что это действительно ошибка, для которой я подал заявку отчет об ошибке. –