Из объяснения Эрика это связано с тем, что console.log()
находится в очереди, и он печатает более позднее значение массива (или объекта).
Могут быть 5 решений:
1. arr.toString() // not well for [1,[2,3]] as it shows 1,2,3
2. arr.join() // same as above
3. arr.slice(0) // a new array is created, but if arr is [1, 2, arr2, 3]
// and arr2 changes, then later value might be shown
4. arr.concat() // a new array is created, but same issue as slice(0)
5. JSON.stringify(arr) // works well as it takes a snapshot of the whole array
// or object, and the format shows the exact structure
Вы также можете использовать addNA()
.
x <- c(1, 1, 2, 2, 3, NA)
addNA(x)
# [1] 1 1 2 2 3 <NA>
# Levels: 1 2 3 <NA>
Это в основном удобная функция для факторинга с exclude = NULL
. Из help(factor)
-
blockquote>
addNA
изменяет коэффициент, поворачиваяNA
на дополнительный уровень (так что значенияNA
подсчитываются, например, в таблицах).Итак, еще одна причина, по которой это хорошо, потому что, если у вас уже есть коэффициент
f
, вы можете использоватьaddNA()
, чтобы быстро добавитьNA
как факторный уровень без измененияf
. Как указано в документации, это удобно для таблиц. Он также хорошо читается.
Вы можете добавить NA как уровень и изменить имя уровня на более явное, чем <NA>
, используя fct_explicit_na
из пакета forcats .
library(forcats)
By по умолчанию вы получаете новый уровень как (Missing)
:
fct_explicit_na(a)
[1] 1 1 2 2 3 (Missing)
Levels: 1 2 3 (Missing)
Вы можете установить его на что-то еще:
fct_explicit_na(a, "unknown")
[1] 1 1 2 2 3 unknown
Levels: 1 2 3 unknown
Установите аргумент exclude в NULL, чтобы включить NA в качестве уровней (и использовать коэффициент вместо as.factor. Делает то же самое и имеет больше аргументов):
a = factor(as.character(c(1, 1, 2, 2, 3, NA)), exclude = NULL)
> a
[1] 1 1 2 2 3 <NA>
Levels: 1 2 3 <NA>