←
PDF 321 / 520 Character
→
English · PDF 321
Original PDF page 321
中文 · PDF 321
0 Inf NA NaN
is.finite() x
is.infinite() x
is.na() x x
is.nan() x

字符型

字符向量是最复杂的一种原子向量,因为字符向量的每个元素都是一个字符串,而字符串可以包含任意数量的数据。

在第 11 章中你已经学到了很多处理字符串的知识。这里我想提一下底层字符串实现的一个重要特性:R 使用全局字符串池。这意味着每个唯一的字符串只在内存中存储一次,每次使用该字符串时都指向那个表示。这减少了重复字符串所需的内存量。你可以通过 pryr::object_size() 在实践中观察这种行为:

x <- "This is a reasonably long string." pryr::object_size(x) #> 136 B y <- rep(x, 1000) pryr::object_size(y) #> 8.13 kB

y 并没有占用 x 的 1000 倍内存,因为 y 的每个元素只是指向同一个字符串的指针。一个指针占 8 字节,所以 1000 个指向 136 B 字符串的指针占用 8 * 1000 + 136 = 8.13 kB。

缺失值

注意,每种类型的原子向量都有其自己的缺失值:

NA # logical #> [1] NA NA_integer_ # integer #> [1] NA NA_real_ # double #> [1] NA NA_character_ # character #> [1] NA