我想找出用法之间的区别是什么
data.frame(a,b,c,y)
和
data.frame(cbind(a,b,c,y))
我有三个包含因子(文本)的向量 a、b、c 和一个存储计数(数字)的向量 (y)。
根据符号的不同,当我运行这个模型时,我得到不同的答案
model.glm <- glm(y ~ a * b * c, data=blabla, family=poisson)
我想这是因为其中一个因素是"无因素",但我不确定。 哪种方式是正确的?
默认情况下,cbind
返回一个matrix
,它只能有一个数据类型。混合数据类型(例如数字和字符)通常会强制转换为字符。例如:
a <- 1:3
b <- c("a", "b", "c")
cb <- cbind(a,b)
cb
a b
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
class(cb)
[1] "matrix"
typeof(cb)
[1] "character"
当你把它传递到一个data.frame
,默认情况下,字符被转换成因子(StringsAsFactors = TRUE
;设置为FALSE
以抑制这种行为),它们基本上是字符串的整数表示。
df <- data.frame(cb)
typeof(df$a)
[1] "integer"
typeof(df$b)
[1] "integer"
class(df$a)
[1] "factor"
class(df$b)
[1] "factor"
我假设这不是您想要的行为,并且由于data.frame
会很好地为您cbind
事情,同时保持其原始类型(除了将字符串转换为因子,正如我所说,可以抑制),我会坚持使用更简单的data.frame(a,b)
结构。
cbind(a,b,c,y)
返回不允许多种数据类型的矩阵。因此,如果假设a,b和c是数字,y是一个因子,那么data.frame(cbind(a,b,c,y))
只包含因子。
如果没有cbind()
,A、B 和 C 不会转换为因子。