【问题标题】:using as.ppp on data frame to create marked process在数据框上使用 as.ppp 创建标记的进程
【发布时间】:2017-08-04 09:34:20
【问题描述】:

我正在使用数据框使用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)

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

谢谢。

【问题讨论】:

    标签: spatstat


    【解决方案1】:

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

    由于PointDataUTM 是一个tbl 对象,而tbl 是dplyr 包中的一个函数,因此可能发生的情况是tbl 类的子集运算符正在返回一个数据帧,并且不是数字向量,当提取单个列时。而$ 运算符返回一个数字向量。

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

    在spatstat 的下一版本中,我们将让我们的代码更健壮地解决此类问题。

    【讨论】:

    • 是的,x 和 y 是您在我的 dput 语句中看到的前两列。我检查了列索引和 df$name。
    【解决方案2】:

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

    【讨论】:

    • 是的,可能是这种情况,因为我使用 dplyr 从 csv 创建数据框。
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2021-06-15
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多