←
PDF 324 / 520 Test Functions
→
English · PDF 324
Original PDF page 324
中文 · PDF 324

#> [1] "double" typeof(c(1.5, "a")) #> [1] "character"

原子向量不能混合不同类型,因为类型是整个向量的属性,而不是单个元素的属性。如果需要在同一个向量中混合多种类型,你应该使用列表(list),你很快就会学到。

测试函数

有时你想根据向量的类型执行不同的操作。一种选择是使用 typeof()。另一种是使用返回 TRUE 或 FALSE 的测试函数。Base R 提供了许多类似 is.vector() 和 is.atomic() 的函数,但它们常常返回令人意外的结果。更安全的做法是使用 purrr 提供的 is_* 函数,下表对其进行了总结。

lgl int dbl chr list
is_logical() x
is_integer() x
is_double() x
is_numeric() x x
is_character() x
is_atomic() x x x x
is_list() x
is_vector() x x x x x

每个谓词函数还有一个“标量”版本,例如 is_scalar_atomic(),用于检查长度是否为 1。例如,当你想检查传给函数的参数是否为单个逻辑值时,这会很有用。

标量与循环规则

除了隐式地将向量类型强制转换为兼容类型之外,R 还会隐式地对向量的长度进行强制转换。这被称为向量循环(recycling),因为较短的向量会被重复(即循环使用),以达到与较长向量相同的长度。

当你混合使用向量和“标量”时,这通常最为有用。我把标量放在引号里,因为 R 实际上并没有