Вы должны использовать colMeans
для этого:
colMeans(ManagerRet, na.rm=TRUE)
## Manager
## -6.826297e-05
Если это был файл data.frame, вы получили бы предупреждение (но правильный вывод).
Здесь вы обнаруживаете несогласованность в том, что объекты data.frame
и zoo
подмножество с [
с индексом логической матрицы. Кажется, это ошибка в [.zoo
.
Проблема возникает на этом этапе внутри mean.default
:
if (na.rm)
x <- x[!is.na(x)]
Вот где это происходит:
ManagerRet[!is.na(ManagerRet)]
## 1
## NaN
!is.na(ManagerRet)
выглядит так, как ожидалось, но не является:
class(!is.na(ManagerRet))
[1] "matrix"
Этот класс неожиданен в [.zoo
. Эти строки присутствуют:
if (all(class(i) == "logical"))
i <- which(rep(i, length.out = n2))
else if (inherits(i, "zoo") && all(class(coredata(i)) ==
"logical")) {
i <- which(coredata(merge(zoo(, time(x)), i)))
}
else if (!((all(class(i) == "numeric") || all(class(i) ==
"integer"))))
i <- which(MATCH(index(x), i, nomatch = 0L) > 0L)
Последняя строка здесь фактически выполняется в этом случае, создавая неверные результаты.
Структура:
> dput(ManagerRet)
structure(c(NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,
NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.00063832, -4.4625e-06,
0.0028142, 0.00051114, -0.0010105, 0.007565, 0.0021002, -0.0091716,
0.0011173, -0.0069207, 0.00026241, 0.001752, -2.6443e-05, -0.0014169,
0.00037602, 4.3982e-05, -6.7328e-06, 1.1571e-05, 1.4016e-07,
-2.0426e-07), .Dim = c(38L, 1L), .Dimnames = list(c("2011-10-04",
"2011-10-05", "2011-10-06", "2011-10-07", "2011-10-11", "2011-10-12",
"2011-10-13", "2011-10-14", "2011-10-17", "2011-10-18", "2011-10-19",
"2011-10-20", "2011-10-21", "2011-10-24", "2011-10-25", "2011-10-26",
"2011-10-27", "2011-10-28", "2011-10-31", "2011-11-01", "2011-11-02",
"2011-11-03", "2011-11-04", "2011-11-07", "2011-11-08", "2011-11-09",
"2011-11-10", "2011-11-14", "2011-11-15", "2011-11-16", "2011-11-17",
"2011-11-18", "2011-11-21", "2011-11-22", "2011-11-23", "2011-11-25",
"2011-11-28", "2011-11-29"), "Manager"), index = 1:38, class = "zoo")
старый код - colMeans
- это правильный способ сделать это: указание «столбец» с помощью $ обойдется в этом:
mean(ManagerRet, na.rm=TRUE)
## [1] NaN
mean(ManagerRet$Manager, na.rm=TRUE)
## [1] -6.826297e-05