我正在尝试将函数应用于 R 中数据帧的每一行。我已经在 Stack Overflow 中完成了几个答案,但它们不起作用。
基本上我有一个纬度和经度信息的数据框。函数 convertLngs2 接受 3 个输入 --> 来自数据帧的经度信息列、源经度和目标经度。如果源经度和目的地经度的差值大于 180 度,则经度列中的所有负值都需要增加 360 度。
library(dplyr)
library(geosphere)
# Source
latWaterloo <- 43.46687
lngWaterloo <- -80.52464
# Destination
latTaiwan <- 23.5983
lngTaiwan <- 120.8354
convertLngs2 <- function(lonn, srcLng, sonLng) {
diffr <- abs(srcLng) + abs(sonLng)
if (diffr > 180) {
if (lonn<0) {
lonn <- lonn + 360
} else {
lonn <- lonn
}
} else {
lonn <- lonn
}
}
geo_lines <- gcIntermediate(c(lngWaterloo, latWaterloo), c(lngTaiwan, latTaiwan), n=100, addStartEnd=T, sp=F)
geo_lines <- data.frame(geo_lines)
geo_lines2 <- geo_lines %>% mutate(lon=sapply(lon, convertLngs2(lon, lngWaterloo, lngTaiwan)))
geo_lines3 <- geo_lines %>% mutate(lon=convertLngs2(lon, lngWaterloo, lngTaiwan))
geo_lines4 <- geo_lines %>% mutate(lon=lapply(lon, convertLngs2(lon, lngWaterloo, lngTaiwan)))
geo_lines5 <- geo_lines %>% mutate(lon=apply(lon, 1, convertLngs2(lon, lngWaterloo, lngTaiwan)))
我需要在函数中保留 srcLng 和 sonLng 的参数。我已经尝试过 sapply、lapply 和 apply,但它们都给出了以下错误:
Error in mutate_impl(.data, dots) :
Evaluation error: 'convertLngs2(lon, lngWaterloo, lngTaiwan)' is not a function, character or symbol.
In addition: Warning message:
In if (lonn < 0) { :
the condition has length > 1 and only the first element will be used
代码需要进行哪些更改才能正常工作?谢谢!