Использование функции apply: получение возвращаемых значений NA в виде списка значений, не являющихся числовыми

#r #apply

Вопрос:

У меня есть список значений в качестве вывода:

 [,1] [,2] [,3]  ATE_true numeric,1000 numeric,1000 numeric,1000 ate_now numeric,1000 numeric,1000 numeric,1000 ate_truew numeric,1000 numeric,1000 numeric,1000 ate_estw numeric,1000 numeric,1000 numeric,1000 ci_w numeric,1000 numeric,1000 numeric,1000  

Я хочу получить среднее значение для каждой 1000 значений, т. Е. среднее значение(ATE_true[,1], ATE_true[,2]… и так далее. Следовательно, используется функция apply

 apply(output,1:2,mean)  

Но я получаю взамен значения NA с ошибкой: В смысле.по умолчанию(newX[, i], …) : аргумент не является числовым или логическим: возвращает NA

Я понимаю , что вывод в формате списка рассматривается как нечисловой, но как мне это решить?

Мой желаемый результат:

 [,1] [,2] [,3] ATE_true 0.98 0.94 0.97 ate_now 0.86 0.85 0.88 ate_truew 0.83 0.87 0.85 ate_estw 0.86 0.89 0.90 ci_w 0.92 0.91 0.95  

Ответ №1:

Это a matrix с элементами as list . Нам нужно lapply/sapply

 sapply(output, mean)  

-выход

 [1] -0.046958713 -0.007220200 0.029603442 0.003012857 -0.049690575 -0.027583183 0.013375545 0.008587789 0.010594652 0.019766799 [11] -0.016020775 0.015412491  

Если нам нужны данные для matrix ввода , используйте dim

 out lt;- sapply(output, mean) dim(out) lt;- dim(output)  

-выход

 gt; out  [,1] [,2] [,3] [1,] -0.046958713 -0.049690575 0.01059465 [2,] -0.007220200 -0.027583183 0.01976680 [3,] 0.029603442 0.013375545 -0.01602077 [4,] 0.003012857 0.008587789 0.01541249  

Если нам dimnames тоже понадобится

 dimnames(out) lt;- dimnames(output)  

данные

 set.seed(24) output lt;- matrix(replicate(12, rnorm(1000), simplify = FALSE), 4, 3)  

Комментарии:

1. Да, но тогда у меня возникнут проблемы с визуализацией результатов. Как и изначально, у меня есть список примерно из 40 ( 8 * 5 ) . Я обновил, как я хочу, чтобы выглядел мой вывод.

2. @TriparnaPoddar попробуйте обновить