#r #lapply #numeric
Вопрос:
Данные:
library(data.table)
df <- fread(
"A B D E iso year
1 A 1 NA ECU 2009
2 B 2 0 ECU 2009
3 D 3 0 BRA 2011
4 E 4 0 BRA 2011
5 D 7 NA ECU 2008
6 E 1 0 ECU 2008
7 A 3 2 BRA 2012
8 A 4 NA BRA 2012",
header = TRUE
)
Раньше я достигал этого, бегая:
df_cov <- df[,lapply(Filter(is.numeric,.SD),cov, na.rm=TRUE)]
Но с R 4.x это больше не похоже на это. Что-то изменилось и в синтаксисе data.table?
Комментарии:
1. Этот код никогда не вычислял ковариационную матрицу.
cov
у него нетna.rm
аргументов. Ваш код работает, если вы заменитеcov
его наvar
.2. Ааа.. Вы абсолютно правы, я действительно изменил это. Я не считал, что это может иметь значение. Так что, если мне нужна ковариационная матрица вместо дисперсии?
3. Затем вам нужно изменить свой код.
cov
нужна матрица в качестве входных данных. Подмножествоdf
в соответствующие столбцы и передайте результатcov
. Что-то вродеcov(na.omit(df[, Filter(is.numeric, .SD)]))
.4. Или
cov(df[, Filter(is.numeric, .SD)], use = "pairwise.complete.obs")
.