Ошибка в симуляции хи-квадрат - невозможно выделить блок памяти размером 134217728 Tb - PullRequest
0 голосов
/ 30 января 2019

Я использую следующую функцию для своих данных и получаю сообщение об ошибке, касающееся размера блока памяти.Мои данные не такие большие (800 строк, 3 столбца), и функция работает только тогда, когда я уменьшаю их до 300 строк.

SSAS <- function(x, conf.int = 0.95, B = 10000)
{
x <- as.matrix(x)
nr <- nrow(x)
nc <- ncol(x)
sr <- rowSums(x)
sc <- colSums(x)
n <- sum(x)
E <- outer(sr, sc, "*")/n
dimnames(E) <- dimnames(x)
tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E)
obs <- sum(sort((x - E)^2/E, decreasing = TRUE))/n
sim <- tmp/n
p0 <- (1 - conf.int)/2
return(c(obs, quantile(sim, p0), quantile(sim, 1 -p0)))
}

Ошибка:

Ошибка в FUN(X [[i]], ...): невозможно выделить блок памяти размером 134217728 ТБ

Однако при использовании предоставленных пробных данных, которые больше (более 1000 строк) -Функция работает отлично.

cap <- read.table("http://pbil.univ-lyon1.fr/R/donnees/mfdcapreolus.txt",
h = T)

l1 <- splitmfd(cap)
w <- matrix(unlist(lapply(l1, SSAS)), ncol = 3, byrow = T)

(splitmfd)

splitmfd <- function(mfd) {
 loca1 <- function(x) {
  x <- t(x[, 1:2])
  dimnames(x) <- list(c("mal", "fem"), as.character(1:ncol(x)))
  x
 }
 l0 <- split(mfd, mfd$mon)
 lapply(l0, loca1)
}

Мои данные выглядят так: (Вместо месяцев 1-12, как в выборке, я разбил их на 3 периода - Прошлое, Медсестраи PostNurse)

> head(groups)
  X n_male_mat n_fem_mat  PERIOD
1 1          0        22 PRENURS
2 2          0        14 PRENURS
3 3          4        19 PRENURS
4 4          1         0 PRENURS
5 5          0        21   NURSE
6 6          0        11   NURSE
...