Предполагая, что я правильно понимаю документацию [[
, можно использовать матрицу для подстановки data.frame
:
Третья форма индексации - через числовую матрицу содин столбец для каждого измерения: каждая строка матрицы индекса затем выбирает отдельный элемент массива, и в результате получается вектор. Отрицательные индексы не допускаются в матрице индексов. Допускаются значения NA и нуля: строки индексной матрицы, содержащие ноль, игнорируются, тогда как строки, содержащие NA, дают в результате NA.
Хотя это работает для [
, япытается понять, как это сделать с [[
.
mtcars[1:6, 1:6]
#> mpg cyl disp hp drat wt
#> Mazda RX4 21.0 6 160 110 3.90 2.620
#> Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
#> Datsun 710 22.8 4 108 93 3.85 2.320
#> Hornet 4 Drive 21.4 6 258 110 3.08 3.215
#> Hornet Sportabout 18.7 8 360 175 3.15 3.440
#> Valiant 18.1 6 225 105 2.76 3.460
(ind <- matrix(1:6, ncol = 2))
#> [,1] [,2]
#> [1,] 1 4
#> [2,] 2 5
#> [3,] 3 6
mtcars[ind]
#> [1] 110.00 3.90 2.32
mtcars[[ind]]
#> Error in as.matrix(x)[[i]]: attempt to select more than one element in vectorIndex
Это ошибка? Или я неправильно истолковываю документацию?
Вот источник [[.data.frame
(v3.6.1)
function (x, ..., exact = TRUE)
{
na <- nargs() - !missing(exact)
if (!all(names(sys.call()) %in% c("", "exact")))
warning("named arguments other than 'exact' are discouraged")
if (na < 3L)
(function(x, i, exact) if (is.matrix(i))
as.matrix(x)[[i]]
else .subset2(x, i, exact = exact))(x, ..., exact = exact)
else {
col <- .subset2(x, ..2, exact = exact)
i <- if (is.character(..1))
pmatch(..1, row.names(x), duplicates.ok = TRUE)
else ..1
col[[i, exact = exact]]
}
}