我整天都在和这头野兽搏斗。一方面它需要一个矩阵,另一方面它需要一个data.frame,但它不需要。请帮忙。
> Coffee <- raster("b2boolcafetst.rst")
> b <- raster("b2_dstcabtst.rst")
> c <- raster("b2_dstrdstst.rst")
> d <- raster("b2_dstfuentst.rst")
> e <- raster("b2_srtmtst.rst")
> fdf <- as.data.frame(stack(Coffee, b, c, d, e))
> str(fdf)
'data.frame': 296856 obs. of 5 variables:
$ b2boolcafetst: num 0 0 0 0 0 0 0 0 0 0 ...
$ b2_dstcabtst : num 9512 9482 9452 9422 9392 ...
$ b2_dstrdstst : num 1980 1980 1981 1982 1984 ...
$ b2_dstfuentst: num 5155 5134 5112 5091 5070 ...
$ b2_srtmtst : num 975 980 984 991 998 ...
> fdfdm <- as.matrix(fdf)
> str(fdfdm)
num [1:296856, 1:5] 0 0 0 0 0 0 0 0 0 0 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "b2boolcafetst" "b2_dstcabtst" "b2_dstrdstst" "b2_dstfuentst" ...
> fdfmod <- glm(Coffee ~ b + c + d + e, family=binomial(link='logit'),
+ data=fdf)
Error in model.frame.default(formula = Coffee ~ b + c + d + e, data = fdf, :
object is not a matrix
> fdfmod <- glm(Coffee ~ b + c + d + e, family=binomial(link='logit'),
+ data=fdfdm)
Error in model.frame.default(formula = Coffee ~ b + c + d + e, data = fdfdm, :
'data' must be a data.frame, not a matrix or an array
>
答案 0 :(得分:2)
如果您引用的对象/变量不是您正在使用的数据框或矩阵中的列,则会出现此错误。所以更换&#34; b + c + d + e&#34;使用数据中的列名称可以解决此问题。所以试试这个:
glm(Coffee ~ b2_dstcabtst + b2_dstrdstst + b2_dstfuentst + b2_srtmtst,
family=binomial(link='logit'), data=fdf)
如果你要使用数据中的所有列,就像这里的情况一样,那么你也可以使用:
glm(Coffee ~ ., family=binomial(link='logit'), data=fdf)
答案 1 :(得分:0)
使用as.data.frame(x)
将对象强制为数据框。在这种情况下:
fdfdm <- as.data.frame(fdfdm)
那对我有用。