Срез / подмножество в R с использованием вектора / матрицы / списка в качестве индексов - PullRequest
1 голос
/ 06 ноября 2019

Мы можем получить элемент во 2-й строке 4-го столбца как

iris[2,4]

Как сделать то же самое, если у меня есть вектор / матрица элементов среза. т.е. могу ли я получить что-либо из следующего, чтобы выдать тот же результат, что и у iris [2,4]? (Или что-нибудь подобное, без создания каких-либо временных переменных)

a = c(2,4)
b = matrix(c(2,4), nrow=1)
c = list(2,4)
iris[a]
iris[b]
iris[c]

1 Ответ

3 голосов
/ 06 ноября 2019

Значение приведено к символу, потому что вы используете метод matrix для поднабора, а один из столбцов имеет символ класса.

Мы можем обойти это двумя способами. Либо мы удаляем столбец символов заранее,

v <- c(2, 4)
m <- matrix(c(2, 4), nrow=1)
l <- list(2, 4)

iris[,-5][t(v)]
# [1] 0.2
iris[,-5][m]
# [1] 0.2
iris[,-5][do.call(cbind, l)]
# [1] 0.2

, либо используем метод list для поднабора. (iris является data.frame, поэтому применимы оба)

iris[[rev(v)]]
# [1] 0.2
iris[[rev(c(m))]]
# [1] 0.2
iris[[rev(unlist(l))]]
# [1] 0.2
...