使用 destPoint 函数应用函数

Apply function with destPoint function

我想在我的数据帧上应用 destPoint 函数,但我正在努力让它工作。

我有以下代码可以正常工作,所以在我的数据帧上应用它时我摔倒了:

sectorCoor <- as.vector(t(destPoint(c(-8.609117,52.69373),c(360,9.6,19.8,30,40.2,50.4,60.6),2500)))

转置和 as 向量纯粹是装饰性的,因此我的数据框的每一行都有一行值。

其中 -8.609117,52.69373 是原始经纬度(示例文件中的 H&I 列), 360、9.6、19.8、30、40.2、50.4、60.6(col AQ-AW)是我希望计算终点的方位角,2500 是我希望计算的距离。

当我尝试使用下面的代码合并应用函数时出现错误:

siteCoor <- apply(RNC20[,c(7:8,42:48)],1, function(x) destPoint(c(x[1]:x[2]),c(x[3]:x[9]),2500)) 

Error in .pointsToMatrix(p) : Wrong length for a vector, should be 2

我相信 p 是指 destPoint 中的 p 变量,它是 long lat 输入,可以是两个数字的向量或两列的矩阵。在我上面的代码中,我将这两个输入作为向量引用 c(x[1]:x[2]),有人可以纠正我这里的错误吗?

我有一些样本数据here如果有帮助

作为次要问题,如何根据 J 列的内容更改等式中的距离元素(末尾为 2500)?如果 J = 10564 将距离设置为 2500,如果 J = 10589 距离 = 2200,如果 J = 10613 设置距离 = 1900 如果 J = 3088 设置距离 = 3000?

不是 x[1]:x[2],而是 x[1:2]。而且它是矢量化的,所以你不需要使用 c()

apply(RNC20[,c(7:8,42:48)],1, function(x) destPoint(x[1:2], x[3:9], 2500))

我不明白如何从 J 获取距离值。J 是某种 ID 吗?如果是这样,我认为这是一种稳定的增加距离的方法column。如果不是(或者您想使用函数来解决它),那么制作以 J 作为参数并输出距离的 function() 是个好主意。

例如:

JtoDist <- function(x) x^2
apply(RNC20[,c(7:8,42:48, JcolNum)] function(x) destpoint(x[1:2], x[3:9], JtoDist(x[10])))

[已编辑]

library(geosphere)
RNC20 <- read.csv("RNC.csv")[,-1]

# Maybe this is what you want ?
t(apply(RNC20[,c(7:8,42:48)],1, function(x) t(destPoint(x[1:2], x[3:9], 2500))))

# or here ? (long format)
library(reshape2)
res <- apply(RNC20[,c(7:8,42:48)],1, function(x) destPoint(x[1:2], x[3:9], 2500))
colnames(res) <- RNC20[,"Cell.Reference"]
rownames(res) <- rep(colnames(RNC20[,42:48]), 2)
melt.res <- cbind(melt(res[1:7,], value.name = "Longitude"), melt(res[8:14,], value.name = "Latitude"))[, c(2,1,3,6)]
head(melt.res)

# question2: an functional approach
J <- c(10564,10589, 10613, 3088)
set.seed(1); RNC20_J <- cbind(RNC20, J = sample(J, 18, replace = T))

JtoDist <- function(x) switch( which(c(x==10564, x==10589, x== 0613, x==3088)), 2500, 2200, 1900, 3000)
JtoDist(10589)    # [1] 2200

t(apply(RNC20_J[,c(7:8,42:49)], 1, function(x) t(destPoint(x[1:2], x[3:9], JtoDist(x[10])))))