在使用rbind和data.frame时,有没有人可以系统地向我解释字符/数字/因子之间的类型转换层次结构?
根据我的理解,rbind
将矩阵放在一起,只能有一种类型。因此,如果存在类型冲突,那么将转换为什么类型?其他类型的矩阵创建函数(例如cbind
,matrix
)的工作方式是否相同?例如:
> sapply(rbind("a", "b"), class)
a b
"character" "character"
> sapply(rbind(1, "b"), class)
1 b
"character" "character"
另一方面,数据框可以包含多种类型,因此data.frame
保留原始类型,除了它总是尝试将字符转换为因子。 (这是正确的吗?这对我来说非常违反直觉。)
使用相同的逻辑,无论是factor(c(1,2))
还是factor(c("a", "b"))
,因素类型始终保持因子是否正确?
> sapply(data.frame("a", "b"), class)
X.a. X.b.
"factor" "factor"
> sapply(data.frame(1, "b"), class)
X1 X.b.
"numeric" "factor"
> sapply(data.frame(1, factor("a")), class)
X1 factor..a..
"numeric" "factor"
答案 0 :(得分:3)
查看?cbind
(或?rbind
)的值部分:
“矩阵结果的类型根据层次结构中的任何输入的最高类型确定< logical< integer< double< complex< character< list”
强制取决于等级的一些例子:
# logical
a <- c(FALSE, TRUE)
# integer
b <- 0:1
# double
c <- c(0, 1.0)
# character
d <- c("0", "1")
m1 <- cbind(a, b)
m1
str(m1)
# logical converted to integer
m2 <- cbind(b, c)
m2
str(m2)
# integer converted to double
m3 <- cbind(c, d)
m3
str(m3)
# double converted to character
另请参阅?cbind
中的“数据框方法”。