2017-08-03 34 views
0

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

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

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

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

谢谢。

回答

0

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

+0

是的,这可能是这种情况,因为我使用dplyr从csv创建数据帧。 – BKS

1

关键检查是否PointDataUTM[,1]是数字,而不是PointDataUTM$POINT_X

由于PointDataUTMtbl对象,tbl距离dplyr包的功能,所可能发生的是,用于tbl类子集操作者返回一个数据帧,而不是数字载体,当一个列被提取。而$运算符返回一个数字向量。

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

在下一个版本的spatstat中,我们将使我们的代码对这类问题更健壮。

+0

是的,x和y是您在我的dput语句中看到的前两列。我检查了列索引和DF $名称。 – BKS