在数据框上使用as.ppp来创建标记过程

时间:2017-08-03 08:52:26

标签: spatstat

我正在使用数据框来使用as.ppp函数创建标记点过程。我收到错误Error: is.numeric(x) is not TRUE。我使用的数据如下:

dput(head(pointDataUTM[,1:2]))

structure(list(POINT_X = c(439845.0069, 450018.3603, 451873.2925, 
446836.5498, 445040.8974, 442060.0477), POINT_Y = c(4624464.56, 
4629024.646, 4624579.758, 4636291.222, 4614853.993, 4651264.579
)), .Names = c("POINT_X", "POINT_Y"), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

我可以看到前两列是数字的,所以我不知道它为什么会出问题。

> str(pointDataUTM)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   5028 obs. of  31 variables:
 $ POINT_X      : num  439845 450018 451873 446837 445041 ...
 $ POINT_Y      : num  4624465 4629025 4624580 4636291 4614854 ...

然后我还检查了NA,它显示没有NA

> sum(is.na(pointDataUTM$POINT_X))
[1] 0
> sum(is.na(pointDataUTM$POINT_Y))
[1] 0

当我甚至只尝试data.frame的前两列时,我使用as.ppp得到的错误就是这样:

Error: is.numeric(x) is not TRUE
5.stop(sprintf(ngettext(length(r), "%s is not TRUE", "%s are not all TRUE"), ch), call. = FALSE, domain = NA)
4.stopifnot(is.numeric(x))
3.ppp(X[, 1], X[, 2], window = win, marks = marx, check = check)
2.as.ppp.data.frame(pointDataUTM[, 1:2], W = studyWindow)
1.as.ppp(pointDataUTM[, 1:2], W = studyWindow)

有人能告诉我这里的错误是什么以及为什么我得到非数字错误?

谢谢。

2 个答案:

答案 0 :(得分:1)

严格检查PointDataUTM[,1]是否为数字,而不是PointDataUTM$POINT_X

由于PointDataUTMtbl对象,tbldplyr包中的函数,所以可能发生的是{{1}的子集运算符当提取单个列时,class返回数据框,而不是数字向量。而tbl运算符返回一个数字向量。

我建议您在致电$之前使用data.frame将数据转换为as.data.frame()

as.ppp的下一个版本中,我们将使代码更加强大,可以解决此类问题。

答案 1 :(得分:0)

我正在打电话,所以无法检查,但我认为这是因为你有一个tibble而不是data.frame。请先尝试使用as.data.frame转换为data.frame。