Это дополнительный вопрос к этому. В исходном вопросе OP хотел выполнить начальную загрузку для двух фиксированных столбцов x1
и x2
:
set.seed(1000)
data <- as.data.table(list(x1 = runif(200), x2 = runif(200), group = runif(200)>0.5))
stat <- function(x, i) {x[i, c(m1 = mean(x1), m2 = mean(x2))]}
data[, list(list(boot(.SD, stat, R = 10))), by = group]$V1
Однако я думаю, что эту проблему можно красиво расширить, чтобы обрабатывать любое количество столбцов, рассматривая их как группы. Например, давайте использовать набор данных iris
. Скажем, я хочу вычислить среднее значение начальной загрузки для всех четырех измерений для каждого вида. Я могу использовать Melt, чтобы перевернуть данные, а затем использовать комбинацию Species
, variable
, чтобы получить среднее значение за один раз — я думаю, что этот подход будет хорошо масштабироваться.
data(iris)
iris = data.table(iris)
iris[,mean(Sepal.Length),by=Species]
iris[,ID:=.N,]
iris_deep = melt(iris
,id.vars = c("ID","Species")
,measure.vars = c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"))
#define a mean bootstrap function
stat <- function(x, i) {x[i, m=mean(value),]}
iris_deep[, list(list(boot(.SD, stat, R = 100))), by = list(Species,variable)]$V1
Вот моя попытка сделать это. Однако часть начальной загрузки, похоже, не работает. Поскольку R выдает следующую ошибку:
Error in mean(value) : object 'value' not found
Может кто-нибудь, пожалуйста, взломать это?