Вычитание двух числовых переменных, возвращающих NA

#r

Вопрос:

 set.seed(10003) Niter lt;- 5 null_diff lt;- vector(length=Niter) for (i in 1:Niter){  households$ControlPermute lt;- sample(households$voted[households$treatment=='Control'], size=180002, replace=T)    null_avg_treated lt;- mean(households$ControlPermute[households$treatment=='Neighbors'])  null_avg_control lt;- mean(households$ControlPermute[df$treatment=='Control'])  null_diff[i] lt;- null_avg_treated - null_avg_control   print(null_avg_treated)  print(null_avg_control)  print(null_diff[i]) }  

Когда я запускаю этот код с помощью инструкции print, я получаю следующий вывод

 [1] 0.305814 [1] NA [1] NA [1] 0.3055574 [1] NA [1] NA [1] 0.3041573 [1] NA [1] NA [1] 0.3048125 [1] NA [1] NA [1] 0.3058008 [1] NA [1] NA  

Я не уверен, почему это происходит, потому что переменным присваиваются числовые значения, но когда они печатаются, а также вычитаются для хранения в векторе null_diff, NA возвращается

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

1. Измените mean(x) на mean(x, na.rm=TRUE) .

2. Спасибо! Знаете ли вы, почему значения выводятся на консоль, но когда они фактически вычитаются, они все равно возвращаются?

3. Вы не получали никаких NAs в векторе, используемом для создания null_avg_treated , поэтому это значение не NA является и, следовательно, печатается в виде числа. Но вы получаете NAs в векторе , используемом для создания null_avg_control , и поэтому null_avg_control он имеет значение NA и (как и должно быть) печатается как NA . И когда вы вычитаете, вы берете разницу между числом ( null_avg_treated ) и NA ( null_avg_control ), которая есть NA .

4. Кроме того, я очистил / упорядочил ваш код в вопросе выше. Это делает очевидным , что вы используете оба households$treatment и df$treatment , что, вероятно, неверно, и может привести к тому, что вы получите NA s там, где вы их не ожидали.