2016-07-24 2 views
0

Что такое хороший способ избавиться от значений NA в векторе вероятности в R? Я делаю некоторые выборки, а иногда есть значения NA в векторе вероятности, потому что в популяции нет вхождений определенного значения. Приведенный ниже код иллюстрирует проблему:Замена NAs в векторе вероятности

population <- c("A", "B", "B") 
probs <- prop.table(table(population)) 
action <- c("A", "C", "D") 
test <- sample(action,1,prob=c(probs[1], probs[2], probs[3])) 

ответ

0

Она смотрит на меня, как вы хотите, чтобы определить вероятность каждого элемента action, используя вероятность соответствующего элемента в population. Вы можете сделать это с помощью символа индексации probs вектора, в частности, индексацию probs с population:

set.seed(1L); 
population <- c('A','B','B'); 
probs <- prop.table(table(population)); 
action <- c('A','C','D'); 
test <- sample(action,1L,prob=probs[population]); 
test; 
## [1] "C" 

Ваш код не удается, потому что probs имеет только два элемента; probs[3] возвращает NA. Также обратите внимание, что probs[1:3] является более сжатым факторингом c(probs[1],probs[2],probs[3]).

+0

Что такое 1L? более символов .......... – user21478

+0

'1L' - целочисленный литерал, тогда как' 1' будет двойным литералом. В большинстве случаев не обязательно различать эти два типа хранилища, но я предпочитаю использовать соответствующий тип во всех случаях, я полагаю, что для корректности, согласованности и возможных преимуществ производительности (т. Е. Уменьшения необходимости принуждения). В этом случае аргумент 'size'' sample() 'должен быть целым числом. Он добавляет еще один символ в числовой литерал, поэтому я не думаю, что это очень важно. – bgoldst

Смежные вопросы