首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggmap中的“二进制运算符的非数值参数”

ggmap中的“二进制运算符的非数值参数”
EN

Stack Overflow用户
提问于 2018-12-07 01:45:02
回答 1查看 215关注 0票数 0

这个问题已经更新了好几次。

这是how to create data frames (not just one) at once in r提出的另一个问题。我真的不明白这个错误信息。我有两个数据帧:

代码语言:javascript
复制
> route1
                      X1                         X2                         X3
1 Balboa Park, san diego, ca    Coronado, san diego, ca  USS Midway, san diego, ca
2 Balboa Park, san diego, ca  USS Midway, san diego, ca    Coronado, san diego, ca
3    Coronado, san diego, ca Balboa Park, san diego, ca  USS Midway, san diego, ca
4    Coronado, san diego, ca  USS Midway, san diego, ca Balboa Park, san diego, ca
5  USS Midway, san diego, ca Balboa Park, san diego, ca    Coronado, san diego, ca
6  USS Midway, san diego, ca    Coronado, san diego, ca Balboa Park, san diego, ca

代码语言:javascript
复制
> place
# A tibble: 8 x 5
  name                                                hour type  short                abbr  
* <chr>                                              <dbl> <chr> <chr>                <chr> 
1 Balboa Park, san diego, ca                             4 place Balboa Park          bal   
2 USS Midway, san diego, ca                              2 place USS Midway           midway
3 Coronado, san diego, ca                                4 place Coronado             coro  
4 Cabrillo National Monument, san diego, ca              2 place Cabrillo             cab   
5 La Jolla Cove, san diego, ca                           2 place La Jolla             ljc   
6 4002 Wallace St, San Diego, CA 92110                   4 place Old Town             ot    
7 Hotel Republic San Diego, Autograph Collection        NA hotel Autograph Collection NA    
8 THE US GRANT, a Luxury Collection Hotel, San Diego    NA hotel Luxury Collection    NA    

我的想法是使用ggmap包获取从Hotel Republic San Diego, Autograph Collection (place$name[7])到route1的第一行的第一个位置的驱动时间,然后从route1的第一行的第一个位置到route1的第一行的第二个位置,等等,直到从route1的第一行的最后一个位置到THE US GRANT, a Luxury Collection Hotel, San Diego(place$name[8])。把时间加起来,存储在< code >D12列中。然后对下面的行执行同样的操作。所以我的代码是

代码语言:javascript
复制
library(ggmap)
register_google(key = "my_google_key_here")
route1$time <- 0
for (i in 1:length(route1)) {
  for (j in 1:length(route1[i,])) {
    if(j == 1){
      route1$time[i] <- route1$time[i] + mapdist(from = place$name[7], to = as.character(route1[i,][1]))$seconds
    }
    if(j == length(route1[i,])){
        route1$time[i] <- route1$time[i] + mapdist(from = as.character(route1[i,][j]), to = place$name[8])$seconds
        route1$time[i] <- route1$time[i] + mapdist(from = as.character(route1[i,][j - 1]), to = as.character(route1[i,][j]))$seconds
    }
    for (j in 2:length(route1[i,]-1)) {
      route1$time[i] <- route1$time[i] + mapdist(from = as.character(route1[i,][j - 1]), to = as.character(route1[i,][j]))$seconds
    }
  }
}

执行这段代码给我

代码语言:javascript
复制
Error in FUN(left, right) : non-numeric argument to binary operator

错误信息,我认为这是说我在数字中添加了一个字符,但我找不到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 03:08:52

代码语言:javascript
复制
# this is a nice library for R
library(tidyverse)

# name your variables
# (you can use these as arguments to a function or something)
start = place$name[7]
end = place$name[8]

# wrap your computation into a function which takes
# a row of a data frame as input    
compute_route_time = function(row) {
  # get a vector of stops that you can loop through
  stops = unlist(row)

  # distance from start to first stop
  time = mapdist(from = start, to = stops[1])$seconds
  # iterate through the rest of the route
  n_stops = length(stops)
  for (i in 1:(n_stops-1)) {
    time = time + mapdist(from = stops[i], to = stops[i+1])$seconds
  }
  # finish rout
  time = time + mapdist(from = stops[n_stops], to = end)$seconds

  # collect row as a data frame to preserve old columns
  row = as.data.frame(row)
  # add time column
  row$time = time
  return(row)
}

route1 %>%
  dplyr::rowwise() %>%
  dplyr::do(compute_route_time(.))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53662127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档