我想了解
的用法之间的区别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)
我想这是因为其中一个因素是制造因素“无因素”,但我不确定。 哪种方法是正确的?
答案 0 :(得分:11)
默认情况下,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)
结构。
答案 1 :(得分:1)
cbind(a,b,c,y)
返回一个不允许多种类型数据的矩阵。因此,如果a,b和c是数字而y是一个因子,则data.frame(cbind(a,b,c,y))
仅包含因子。
没有cbind()
,a,b和c不会转换为因子。