#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 там, где вы их не ожидали.