English · PDF 323
由于显式强制转换相对较少使用,而且大多易于理解,所以我在这里将重点讨论隐式强制转换。
你已经见过最重要的隐式强制转换类型:在数值上下文中使用逻辑向量。在这种情况下,TRUE 会被转换为 1,FALSE 会被转换为 0。这意味着逻辑向量的和就是 TRUE 的个数,逻辑向量的均值就是 TRUE 的比例:
x <- sample(20, 100, replace = TRUE) y <- x > 10 sum(y) # 有多少个大于 10? #> [1] 44 mean(y) # 大于 10 的比例是多少? #> [1] 0.44
你可能会看到一些代码(通常是较旧的代码)依赖相反方向的隐式强制转换,即从整数到逻辑值:
if (length(x)) { # 做某些事情 }
在这种情况下,0 会被转换为 FALSE,其他所有值都会被转换为 TRUE。我认为这会让代码更难理解,所以我不推荐这样做。相反,应该明确地写:length(x) > 0。
同样重要的是要理解,当你尝试用 c() 创建包含多种类型的向量时会发生什么——最复杂的类型总是会胜出:
typeof(c(TRUE, 1L)) #> [1] "integer" typeof(c(1L, 1.5))