Как использовать элемент списка с произвольной выборкой для случайной выборки другого списка?

#r #list #sampling

#r #Список #выборка

Вопрос:

Я пытаюсь использовать случайно выбранную букву из nbMtx $ R для выборки из одного из других компонентов списка, но я получаю сообщение об ошибке, в котором говорится, что у меня неверное число вероятностей при моей второй попытке выборки. Я вызвал length(nbMtx[start]), и он возвращает [3], поэтому я не уверен, почему мой вектор вероятности visit_prob (который имеет 3 значения) не работает. Я также попытался заменить аргумент prob во втором примере на c(.3, .3, .3) на всякий случай, и это также не сработало.

 set.seed(514) #seed in reference to the class’ code
nbMtx <- list() #Rory’s neighborhood connections
nbMtx$R <- c("L","P","D","J")
nbMtx$L <- c("P","R","D")
nbMtx$P <- c("L","R","J")
nbMtx$D <- c("L","R","J")
nbMtx$J <- c("P","R","D")

original_prob<- rep.int(.25, 4)
visit_prob<- rep.int((1/3), 3)

start<- sample(nbMtx$R, 1, replace=FALSE, prob=original_prob)
  
visit<- sample(nbMtx[start], 1, replace=FALSE, prob=visit_prob)

Error in sample.int(length(x), size, replace, prob) : 
  incorrect number of probabilities
 

Ответ №1:

Просматривая назначение to start , мы видим

 start
# [1] "L"
 

Рассмотрение следующего присваивания visit , которое вызывает ошибку, первый аргумент

 nbMtx[start]
# $L
# [1] "P" "R" "D"
length(nbMtx[start])
# [1] 1
 

И вот в чем проблема. Вместо этого используйте [[ , и вы получите вектор ожидаемой длины:

 nbMtx[[start]]
# [1] "P" "R" "D"
visit <- sample(nbMtx[[start]], 1, replace=FALSE, prob=visit_prob)
visit
# [1] "P"
 

Комментарии:

1. Такое простое решение, и оно отлично сработало… Спасибо!