English · 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