Ошибка в режимах [i,] <- mr: количество заменяемых элементов не кратно длине замены в моем цикле

Я пытался запустить цикл for, чтобы рассчитать размер ниши и достоверные интервалы для каждого из моих семи видов рыб, и продолжаю получать эту ошибку. Ошибка в режимах [i, ]<- mr: количество заменяемых элементов не кратно длине замены

Я начинаю с расчета niche.region для конкретного вида, и я могу заставить это работать, поэтому я хотел рассчитать апостериорное распределение нишевого региона для нескольких видов одновременно. Для этого я использовал петлю.

Вот код, который я запускал для этой проблемы.

# Fit Bayesian part
# 1. Choose the number of re-samples/iterations
nsamples <- 10000
#2. Use fish.par function to generate a list of the main ellipse
#   parameters for each of the random draws (number specified in "nsamples"
#   above). Each element of the list contains 2 objects, a 1 x 2 matrix
#   of the mu values (means) and a 2 x 2 matrix of Sigma values
#   (covariance matrix). Following the vignette:

fish.par1 <- tapply(1:nrow(RS),                               #Apply a function to each factor in the dataframe "fish"
                   RS$Species,                               #specify those factors to be the ones that exist in the column "species" (in my case, this is the ecosystem identifier)
                   function(ii) niw.post(nsamples = nsamples,  #define the function: Take "nsamples" # of random draws from the null posterior distribution (in this case, normal-inverse-Wishart (niw))
                                         X = RS[ii, 2:4]))   #from these columns in the dataframe (isotope data)
# 3. To calculate niche.region for a specific species, the function
#    requires Sigma as the input. Here's the function again for reference:

niche.size <- function(Sigma, alpha = .95) {
  n <- nrow(Sigma)
  sz <- as.numeric(determinant(Sigma, log = TRUE)$modulus)
  sz <- .5 * (sz + n * (log(pi) + log(qchisq(alpha, df = n)))) - lgamma(.5*n+1)
  exp(sz)
}

# But REALLY, we usually want to calculate the posterior
# distributions of niche region for multiple species at once.
# I do that here using a loop. This is extracted directly
# deom the stat.par function, but is truncated to include
# only niche size calculations:

# Extract all non-null elements of the list
nn.fish.par=Filter(Negate(is.null), fish.par1)

# Create an empty matrix to store the results
modes <- matrix(NA, nrow = length(fish.par1), ncol=7)
modes  

modes  
# And then run the loop to calculate niche size and credible
# intervals for each of the seven species:

for(i in 1:length(fish.par1)){
    
    tmpn <- apply(fish.par1[[i]]$Sigma, 3, niche.size, alpha=.95) # calculate posterior distribution of niche size for species "i"
    ns <- hdr(tmpn, prob=95, all.modes=T)$mode                   # calculate mode of the 95% highest density region for species "i"
    ns.cred <- quantile(tmpn, prob = c(.025, .975))                # calculate credible intervals for species "i"
    lower.ns <- as.numeric(ns.cred[1])
    upper.ns <- as.numeric(ns.cred[2])

    group <-names(fish.par1[i]) # what is the name of this species (first-level list name)?
    
    mr <- c(group, round(c(ns, lower.ns, upper.ns),2)) #concatenate desired values, round to 2 decimal places
    
    modes[i,] <- mr  #fill in row "i" with the data we just calculated
}

И тут появляется ошибка.

Я не уверен, что проблема в размере моей матрицы или у меня где-то есть опечатка. Я предполагаю, что проблема связана либо с моими режимами, либо с мистером, но я не уверен. Моя матрица 7x7, так как у меня 7 видов, поэтому в моем режиме есть место для 7 значений. Однако я заметил, что мой мистер дает 10 значений. Не знаю, проблема ли в этом.

Спасибо, Джиллиан

0 ответов

Другие вопросы по тегам