Can';无法获得要执行的R循环

Can';无法获得要执行的R循环,r,R,我从R开始,尝试执行这个循环。我试图让循环使用一个函数(Vincenty公式)来计算坐标之间的连续距离Distfunc'是函数的文件。然后,该函数由下面的“x”调用。我想要的只是一个数据框或坐标之间距离的列表。非常感谢你的帮助 Distfunc <- source("F://Distfunc.R") for (i in length(Radians)) { LatRad1 <- Radians[i,1] LongRad1 <- Radians[i,2]

我从R开始,尝试执行这个循环。我试图让循环使用一个函数(Vincenty公式)来计算坐标之间的连续距离Distfunc'是函数的文件。然后,该函数由下面的“x”调用。我想要的只是一个数据框或坐标之间距离的列表。非常感谢你的帮助

Distfunc <- source("F://Distfunc.R")
for (i in length(Radians)) {
    LatRad1 <- Radians[i,1]
    LongRad1 <- Radians[i,2]
    LatRad2 <- Radians[i+1,1]
    LongRad2 <- Radians[i+1,2]
    x <- gcd.vif(LongRad1, LatRad1, LongRad2, LatRad2) 
    print(data.frame(x[i]))
}

Distfunc好吧,如果没有对您面临的问题的良好描述和适当的可复制示例,很难提供任何好的见解。要开始,请参见

在你做事的方式上,有很多事情是不清楚的。首先,为什么要将
source(…)
的结果分配给变量
Distfunc

不管怎样,这里有一些代码,我把它们放在一起,试图理解这一点;它运行起来没有问题,但不清楚它是否实现了您的期望(因为您没有提供太多信息)。特别是,codet使用Mario Pineda Krch()对函数
gcd.vif
的实现。下面的代码旨在说明问题,因为您提到您是从R开始的

# Calculates the geodesic distance between two points specified by radian latitude/longitude using
# Vincenty inverse formula for ellipsoids (vif)
# By Mario Pineda-Krch (http://www.r-bloggers.com/great-circle-distance-calculations-in-r/)
gcd.vif <- function(long1, lat1, long2, lat2) {

    # WGS-84 ellipsoid parameters
    a <- 6378137 # length of major axis of the ellipsoid (radius at equator)
    b <- 6356752.314245 # ength of minor axis of the ellipsoid (radius at the poles)
    f <- 1/298.257223563 # flattening of the ellipsoid

    L <- long2-long1 # difference in longitude
    U1 <- atan((1-f) * tan(lat1)) # reduced latitude
    U2 <- atan((1-f) * tan(lat2)) # reduced latitude
    sinU1 <- sin(U1)
    cosU1 <- cos(U1)
    sinU2 <- sin(U2)
    cosU2 <- cos(U2)

    cosSqAlpha <- NULL
    sinSigma <- NULL
    cosSigma <- NULL
    cos2SigmaM <- NULL
    sigma <- NULL

    lambda <- L
    lambdaP <- 0
    iterLimit <- 100
    while (abs(lambda-lambdaP) > 1e-12 & iterLimit>0) {
        sinLambda <- sin(lambda)
        cosLambda <- cos(lambda)
        sinSigma <- sqrt( (cosU2*sinLambda) * (cosU2*sinLambda) +
            (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda) )
        if (sinSigma==0) return(0)  # Co-incident points
        cosSigma <- sinU1*sinU2 + cosU1*cosU2*cosLambda
        sigma <- atan2(sinSigma, cosSigma)
        sinAlpha <- cosU1 * cosU2 * sinLambda / sinSigma
        cosSqAlpha <- 1 - sinAlpha*sinAlpha
        cos2SigmaM <- cosSigma - 2*sinU1*sinU2/cosSqAlpha
        if (is.na(cos2SigmaM)) cos2SigmaM <- 0  # Equatorial line: cosSqAlpha=0
        C <- f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha))
        lambdaP <- lambda
        lambda <- L + (1-C) * f * sinAlpha *
            (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)))
        iterLimit <- iterLimit - 1
    }
    if (iterLimit==0) return(NA)  # formula failed to converge
    uSq <- cosSqAlpha * (a*a - b*b) / (b*b)
    A <- 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)))
    B <- uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)))
    deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM^2) -
        B/6*cos2SigmaM*(-3+4*sinSigma^2)*(-3+4*cos2SigmaM^2)))
    s <- b*A*(sigma-deltaSigma) / 1000
    return(s) # Distance in km
}

# Initialize the variable 'Radians' with random data
Radians <- matrix(runif(20, min = 0, max = 2 * pi), ncol = 2)

lst <- list() # temporary list to store the results
for (i in seq(1, nrow(Radians) - 1)) { # loop through each row of the 'Radians' matrix
    LatRad1 <- Radians[i, 1]
    LongRad1 <- Radians[i, 2]
    LatRad2 <- Radians[i + 1, 1]
    LongRad2 <- Radians[i + 1, 2]
    gcd_vif <- gcd.vif(LongRad1, LatRad1, LongRad2, LatRad2)

    # Store the input data and the results
    lst[[i]] <- c(
        latitude_position_1 = LatRad1, 
        longtude_position_1 = LongRad1, 
        latitude_position_2 = LatRad2, 
        longtude_position_2 = LongRad2, 
        GCD = gcd_vif
    )
}
Results <- as.data.frame(do.call(rbind, lst)) # store the input data and the results in a data frame
#使用
#椭球体的Vincenty逆公式(vif)
#马里奥·皮内达·科奇(http://www.r-bloggers.com/great-circle-distance-calculations-in-r/)

gcd.vif它可能不能解决所有问题,但对我来说最明显的事情是你应该使用
for(i in 1:length(Radians)){
for(1 in seq_-along(Radians)){
@Benjamin:实际上,
for(i in seq_-along(Radians)){
是的,正如@tguzella所说的那样。(
i
1
)@Benjamin,实际上这不是一个好主意,因为代码需要行
i+1
处的值。因此,for循环应该是:
for(i in seq(1,nrow(Radians)-1)){
非常感谢这非常有用!