Рассмотрим следующий код:помочь мне улучшить мой самозагрузки
require(Hmisc)
num.boots <- 10
data <- rchisq(500, df = 5) #generate fake data
#create bins
binx <- cut(data, breaks = 10)
binx <- levels(binx)
binx <- sub("^.*\\,", "", binx)
binx <- as.numeric(substr(binx, 1, nchar(binx) - 1))
#pre-allocate a matrix to be filled with samples
output <- matrix(NA, nrow = num.boots, ncol = length(binx))
#do random sampling from the vector and calculate percent
# of values equal or smaller to the bin number (i)
for (i in 1:num.boots) {
walk.pair.sample <- sample(data, size = length(data), replace = TRUE)
data.cut <- cut2(x = walk.pair.sample, cuts = binx)
data.cut <- table(data.cut)/sum(table(data.cut))
output[i, ] <- data.cut
}
#do some plotting
plot(1:10, seq(0, max(output), length.out = nrow(output)), type = "n", xlab = "", ylab = "")
for (i in 1:nrow(output)) {
lines(1:10, output[i, 1:nrow(output)])
}
#mean values by columns
output.mean <- apply(output, 2, mean)
lines(output.mean, col="red", lwd = 3)
legend(x = 8, y = 0.25, legend = "mean", col = "red", lty = "solid", lwd = 3)
мне было интересно, если я могу поставить загрузку: загрузки() работать функция, которая имеет в своем выходе вектор длины п> 1? Возможно ли это?
Вот мои слабые попытки, но я должен делать что-то неправильно.
require(boot)
bootstrapDistances <- function(data, binx) {
data.cut <- cut2(x = data, cuts = binx)
data.cut <- table(data.cut)/sum(table(data.cut))
return(data.cut)
}
> x <- boot(data = data, statistic = bootstrapDistances, R = 100)
Error in cut.default(x, k2) : 'breaks' are not unique
Я не понимаю, почему Hmisc::cut2()
не работает должным образом в boot()
вызова, но работает, когда я называю его в for()
петле (см код выше). Является ли логика моей функции bootstrapDistances()
возможной с boot()
? Любые указатели очень ценятся.
.: EDIT :.
Анико предложил изменить мою функцию таким образом, чтобы включить индекс. При чтении документации для boot() мне было непонятно, как это работает, что объясняет, почему функция может не работать. Вот новая функция Анико предложил:
bootstrapDistances2 <- function(data, idx, binx) {
data.cut <- cut2(x = data[idx], cuts = binx)
data.cut <- table(data.cut)/sum(table(data.cut))
return(data.cut)
}
Однако мне удалось вызвать ошибку, и я до сих пор работает, как удалить его.
> x <- boot(data = data, statistic = bootstrapDistances2, R = 100, binx = binx)
Error in t.star[r, ] <- statistic(data, i[r, ], ...) :
number of items to replace is not a multiple of replacement length
После того, как я перезапустил сеанс R (также попробовал другую версию, 2.10.1), он работает нормально.
Претензии к этой ошибке: x <- boot (data = data, statistic = bootstrapDistances2, R = 100, binx = binx) Ошибка в t.star [r,] <- статистика (данные , i [r,], ...): Количество элементов для замены не кратно номеру замены –
После перезагрузки моей сессии R все работает нормально. Тьфу? Спасибо за ваше сотрудничество. –