r - FUN(X[[i]], ...) 中的错误:使用 st_polygon 时 is.numeric(x) 不是 TRUE
问题描述
这从坐标建立在这个线程多边形上
我有一个数据框canopy_coords
> dput(canopy_coords)
structure(list(Transect_ID = c("A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K"), percentage = c(0.141663114074618, 0.679361716844141,
0.356075131567195, 0.0369279244914651, 0.545912720728666, 0.256667358567938,
0.887708339374512, 0.355368616292253, 0.0197559630032629, 0.0667797913774848,
0.513462982373312), pt1_rbx = c(864943.815781996, 864953.870790847,
864962.2814157, 864970.487301377, 864980.271109795, 864991.027427403,
865000.351992635, 865008.532059795, 865017.232489794, 865026.778973778,
865031.926178827), pt1_rby = c(4173793.09292455, 4173792.95070282,
4173793.68917041, 4173794.85743131, 4173794.84731682, 4173794.94912696,
4173796.92544687, 4173800.28061334, 4173803.77056191, 4173807.13103388,
4173809.1564907), pt2_rbx = c(864938.438652263, 864943.815781996,
864953.870790847, 864962.2814157, 864970.487301377, 864980.271109795,
864991.027427403, 865000.351992635, 865008.532059795, 865017.232489794,
865026.778973778), pt2_rby = c(4173793.46951521, 4173793.09292455,
4173792.95070282, 4173793.68917041, 4173794.85743131, 4173794.84731682,
4173794.94912696, 4173796.92544687, 4173800.28061334, 4173803.77056191,
4173807.13103388), pt3_lbx = c(864938.754229696, 864944.008063806,
864954.103848622, 864962.954663805, 864971.586264863, 864980.897890762,
864991.945752488, 865002.172447518, 865010.506388562, 865018.820648425,
865028.048200056), pt3_lby = c(4173789.72813409, 4173789.63976124,
4173788.97486369, 4173789.15990521, 4173790.60336356, 4173791.370514,
4173791.58086304, 4173793.66042772, 4173797.6375251, 4173801.15880759,
4173804.0296625), pt4_lbx = c(864944.008063806, 864954.103848622,
864962.954663805, 864971.586264863, 864980.897890762, 864991.945752488,
865002.172447518, 865010.506388562, 865018.820648425, 865028.048200056,
865033.427710242), pt4_lby = c(4173789.63976124, 4173788.97486369,
4173789.15990521, 4173790.60336356, 4173791.370514, 4173791.58086304,
4173793.66042772, 4173797.6375251, 4173801.15880759, 4173804.0296625,
4173805.40185838)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-11L))
我尝试使用上述线程将其转换为多边形:
polys <- lapply(1:11, function(x){
# build a matrix of coordinates that enclose the polygon
pmat <- matrix(c(canopy_coords[x, 'pt1_rby'], canopy_coords[x, 'pt1_rbx'],
canopy_coords[x, 'pt2_rby'], canopy_coords[x, 'pt2_rbx'],
canopy_coords[x, 'pt3_lby'], canopy_coords[x, 'pt3_lbx'],
canopy_coords[x, 'pt4_lby'], canopy_coords[x, 'pt4_lbx'],
canopy_coords[x, 'pt1_rby'], canopy_coords[x, 'pt1_rbx']),
ncol = 2, byrow = TRUE)
## create polygon objects
st_polygon(list(pmat), dim = "XY")
})
不幸的是,这会产生这个错误:Error in FUN(X[[i]], ...) : is.numeric(x) is not TRUE
当我检查 pmat 时,结构看起来是正确的:
> pmat
[,1] [,2]
[1,] 4173793 864943.8
[2,] 4173793 864938.4
[3,] 4173790 864938.8
[4,] 4173790 864944
[5,] 4173793 864943.8
如果我“注释”出 st_polygon() 函数,则 polys 对象看起来是正确的:
> head(polys,5)
[[1]]
[,1] [,2]
[1,] 4173793 864943.8
[2,] 4173793 864938.4
[3,] 4173790 864938.8
[4,] 4173790 864944
[5,] 4173793 864943.8
[[2]]
[,1] [,2]
[1,] 4173793 864953.9
[2,] 4173793 864943.8
[3,] 4173790 864944
[4,] 4173789 864954.1
[5,] 4173793 864953.9
[[3]]
[,1] [,2]
[1,] 4173794 864962.3
[2,] 4173793 864953.9
[3,] 4173789 864954.1
[4,] 4173789 864963
[5,] 4173794 864962.3
[[4]]
[,1] [,2]
[1,] 4173795 864970.5
[2,] 4173794 864962.3
[3,] 4173789 864963
[4,] 4173791 864971.6
[5,] 4173795 864970.5
[[5]]
[,1] [,2]
[1,] 4173795 864980.3
[2,] 4173795 864970.5
[3,] 4173791 864971.6
[4,] 4173791 864980.9
[5,] 4173795 864980.3
寻找任何可以解释正在发生的事情的帮助。
解决方案
这是因为您的对象canopy_coords
不仅仅是 a data.frame
,它也是 a tbl
。
你可以做两件事:
pmat <- matrix(unlist(c(canopy_coords[x, 'pt1_rby'], canopy_coords[x, 'pt1_rbx'],
canopy_coords[x, 'pt2_rby'], canopy_coords[x, 'pt2_rbx'],
canopy_coords[x, 'pt3_lby'], canopy_coords[x, 'pt3_lbx'],
canopy_coords[x, 'pt4_lby'], canopy_coords[x, 'pt4_lbx'],
canopy_coords[x, 'pt1_rby'], canopy_coords[x, 'pt1_rbx'])),
ncol = 2, byrow = TRUE)
或者
class(canopy_coords) <- 'data.frame'
其余的保持不变。
推荐阅读
- here-api - 交通 API - FF 定义和最快实际行驶速度属性 FF 或 SU
- python - 如何通过命令行或使用 python 库获取在 Windows 上运行的进程的音频级别?
- prolog - prolog中没有和没有call/2的目标有什么区别?
- swift - 我可以在 SwiftUI 应用程序中使用 View Controller (CalendarKit) 吗?
- c++ - 如果本地 std::function 超出其“生命”,是否有任何问题?
- python - 子进程运行 scp 身份文件不可访问
- thymeleaf - 片段抛出错误内的条件对象
- python - 如何对多个属性(列)进行日志转换 - Python
- r - R中的单独字符数
- html - iframe pdf 无法在移动设备上正确显示