char2dms не работает при вызове через source () - PullRequest
0 голосов
/ 22 февраля 2019

У меня большие проблемы с преобразованием данных широты / долготы из DMS (градусная минута в секунду) в DD (десятичная градусная единица) в пределах фрейма данных.В частности, когда есть записи NA.Я был бы признателен за функцию, аналогичную as.character () и т. Д. Но этого, очевидно, не существует.Поэтому я пытаюсь использовать as.numeric (char2dms ())

Вот мой пример данных:

library(dplyr)
library(tidyr)
library(sp)

df <- data.frame(field = paste("F", 1:10),
           lat = c("52°48'48.8\"N","52°48'48.8\"N","52°48'59.27\"N","52°48'59.27\"N","52°48'26.57\"N","52°47'21.29\"N","52°37'21.30\"N",NA,NA,"52°2'54.53\"N"),
           lon = c("9°13'56.0\"E","9°13'56.0\"E","9°14'5.98\"E","9°14'5.98\"E","9°13'56.43\"E","9°12'35.70\"E","9°6'4.23\"E",NA,NA,"10°45'47.62\"E"))

Что хорошо работает в скрипте R ist:

df <- df%>%
  mutate(lat= as.character(lat),
         lon= as.character(lon))

df2<- df[!is.na(df$lat),] %>% # it is very important to get rid of NAs, because char2dms() is unfortunatel not able to simply ignore NA.
  mutate(latDD = as.numeric(char2dms(lat, chd = "°", chm = "'", chs = "\"")),
         lonDD = as.numeric(char2dms(lon, chd = "°", chm = "'", chs = "\"")))%>%
  right_join(., df)

Однако, когда я сохраняю скрипт и вызываю его из другого скрипта через source (), он больше не работает.К сожалению, этот пример также отличается от моего реального случая, в котором я загружаю данные из файла .txt.Здесь, в этом примере, странная вставляется перед °, когда я вызываю скрипт через source ().

В реальной ситуации сообщение об ошибке выглядит следующим образом:

Error in mutate_impl(.data, dots) : 
  Evaluation error: missing value where TRUE/FALSE needed.

Скорее всего, это происходит от char2dms ().

У кого-нибудь есть объяснение этой разницы?Или альтернатива source () ??

...