Несмотря на то, что я думаю, что проблема у меня может быть простой, я, тем не менее, не могу понять это.Вот в чем дело:
У меня есть следующий список и вектор.Список используется для заполнения вектора:
probabilities = list(c(0.2, 0.3, 0.5), c(0.1, 0.1, 0.8), c(0.3,0.4,0.3))
nextState = c()
for(counter in 1:3){
nextState[counter] = sample(1:3, size = 1, prob = probabilities[[counter]])
}
Код работает нормально.Однако при расширении до более крупных списков (> 10 000 элементов) цикл становится все более медленным.Поскольку вышеприведенный цикл многократно используется в большем коде, затрачиваемое время слишком много.Был бы способ достичь того же результата без зацикливания?
Дополнительный вопрос:
Спасибо, ребята, вы мне очень помогли.Еще один вопрос: как бы подойти к той же проблеме, если вероятности и следующее состояние являются взаимозависимыми значениями, как я могу избежать цикла for?Возможно, какой-то код для уточнения:
M <- list(matrix(c(0.1, 0.2, 0.7, 0.2, 0.2, 0.6, 0.3, 0.3, 0.4), nrow = 3, ncol = 3),
matrix(c(0.3, 0.3, 0.4, 0.5, 0.5, 0, 0.1, 0.1, 0.8), nrow = 3, ncol = 3))
probabilities <- list()
nextState <- c(2, NA, NA)
for(i in 1:2){
probabilities[[i]] <- M[[i]][nextState[i], ]
nextState[i + 1] <- sample(1:3, size = 1, prob = probabilities[[i]])
}
Если у вас есть идеи, то вы действительно чудотворцы !!