When you are dealing with
factors, when the
NA is wrapped in angled brackets (
<NA> ), that indicates thtat it is in fact NA.
When it is
NA without brackets, then it is not NA, but rather a proper factor whose label is
# Note a 'real' NA and a string with the word "NA"
x <- factor(c("hello", NA, "world", "NA"))
 hello <NA> world NA
Levels: hello NA world <~~ The string appears as a level, the actual NA does not.
 1 NA 3 2 <~~ The string has a numeric value (here, 2, alphabetically)
The NA's numeric value is just NA
Edit to answer @Arun's question:
R is simply trying to distinguish between a string whose value are the two letters
"NA" and an actual missing value,
Thus the difference you see when displaying
df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)
Note the two different styles of NA:
1 1 a
2 2 <NA>
3 3 c
4 4 NA
However, if we look at just 'df$y'
 "a" NA "c" "NA"
But, if we remove the quotation marks (similar to what we see when printing a data.frame to the console):
 a <NA> c NA
And thus, we once again have the distinction of
NA via the angled brackets.