R不是矩阵,但它也不会占用data.frame

时间:2017-09-11 00:19:35

标签: r dataframe r-raster

我整天都在和这头野兽搏斗。一方面它需要一个矩阵,另一方面它需要一个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
> 

2 个答案:

答案 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)

那对我有用。