Ошибка в UseMethod ("filter_"): при доступе и обработке Quikscat Скорость и направление ветра с помощью R - PullRequest
0 голосов
/ 21 марта 2020

Я планировал построить скорость ветра и направление ветра, используя данные Quickscat, следуя инструкциям, приведенным в этой ссылке: Доступ и обработка Quikscat Скорость и направление ветра с помощью R .

Все подразделы кодов, казалось, работали нормально. Но в разделе Манипулирование полями ветра , особенно при выборе данных для области интереса путем определения географических границ с помощью функции filter(); выполнение вернулось с Error in UseMethod("filter_") : no applicable method for 'filter_' applied to an object of class "NULL". снимок экрана с ошибкой

Я предполагаю, что они выбирают географическую область, которой нет в данных. Хотя я не уверен. Будет ли решение правильных координат решить проблему? Любые предложения, что мне делать? Кроме того, если у вас есть альтернативные коды для построения данных о ветре из файла netCDF или любого другого файла, я буду очень признателен, если вы поделитесь ими со мной. Спасибо.

1 Ответ

0 голосов
/ 21 марта 2020

Когда я запускал код из учебника, они использовали устаревшую функцию as.tibble () в tidyverse, которая выдавала ошибки. Я изменил это на as_tibble () и пропустил остальную часть кода через строки на вашем скриншоте без каких-либо ошибок. Вы просматривали свой фрейм данных speed.all, прежде чем пытаться его фильтровать? Если у вас были значения NULL из-за ошибки tibble, которая могла быть вашей проблемой.

require(xtractomatic)
require(tidyverse)
require(oce)
require(lubridate)
require(gganimate)
require(sf)

getInfo("qsux101day")
getInfo("qsuy101day")

# set spatial extent
lon = c(25,65)
lat =  c(-35,10)
## set temporal extent
time = c("2006-01-01", "2006-12-31")

wind_x = xtracto_3D(dtype = "qsux101day", 
                    xpos = lon, 
                    ypos = lat, 
                    tpos = time)

wind_y = xtracto_3D(dtype = "qsuy101day", 
                    xpos = lon, 
                    ypos = lat, 
                    tpos = time)

## extract location and time bounds as vector
longitude = wind_x$longitude
latitude = wind_x$latitude
time = wind_x$time%>%as.Date()

## extract u and v as array
# eastward velocity (zonal)
u = wind_x$data
# northward velocity (meridional)
v = wind_y$data

# calculate wind velocity
velocity = sqrt(u^2 + v^2)


n.lon = length(longitude)
n.lat = length(latitude)+1


velocity.all = NULL

for (i in 1:length(time)){
  velocity.df = data.frame(longitude, velocity[,,i] %>% as.data.frame()) %>% 
    gather(key = "key" , value = "velocity", 2:n.lat) %>% 
    mutate(latitude = rep(latitude, each = n.lon), date = time[i]) %>% 
    select(date,longitude, latitude, velocity)%>% 
    as_tibble()

  velocity.all = velocity.all %>% bind_rows(velocity.df)
}

velocity.month = velocity.all %>% 
  filter(between(longitude,38,55)) %>% 
  filter(between(latitude,-15,-7)) %>% 
  mutate(day = yday(date) %>% as.integer(), week = week(date)%>% as.integer(), 
         month = month(date)%>% as.integer())%>%
  group_by(longitude, latitude, month) %>%
  summarise(velocity = mean(velocity, na.rm = TRUE))
...