Одно из различий между data.frame
и тибблом заключается в том, что фреймы данных сбрасывают измерения, когда это возможно по умолчанию, а тиблы - нет.
То есть, если x
является фреймом данных, то x[, i]
может быть или не быть фреймом данных, в зависимости от i
.Если i
это одно значение, то x[, i]
будет просто вектором.Если i
- это вектор с несколькими значениями, тогда x[, i]
будет фреймом данных.Это может привести к ошибкам, когда i
- это переменная, которая может иметь или не иметь несколько значений, поскольку класс может отличаться (с исправлением использования x[, i, drop = FALSE]
для гарантии возврата data.frame
).
Tibbles стремятся решить эту проблему, переключив значение по умолчанию drop = TRUE
на drop = FALSE
, поэтому x[, i]
является тибблом, независимо от того, имеет ли i
длину 1 или больше.
При вычислении среднего значения вы хотите, чтобы df[,i]
рассматривался как числовой вектор, а не как столбец с 1 столбцом, поэтому вам нужно указать его:
df[[i]] # This is the preferred way to extract a single column
df[, i, drop = TRUE] # this will work too (since tibble version 1.4.1)
Это объясняетсяболее подробно в разделе «Tibbles vs data.frames» виньетка Tibbles .