У меня есть пара функций, которые преобразуют между системами координат, и все они полагаются на константы из эллипсоида WGS84 и т. Д. Я бы предпочел, чтобы эти константы не загрязняли глобальное пространство имен. Точно так же не все функции должны быть видны глобально.Аналоговые классы полезности в R?
В Java я инкапсулировал все элементы координат в класс утилиты и только раскрыл методы преобразования координат.
Что такое низкозатратный способ сделать это в R? В идеале я мог бы:
source("coordinateStuff.R")
В верхней части моего файла и при необходимости называть «общедоступные» функции. Это может сделать хороший пакет по дороге, но сейчас это не проблема.
Edit для первоначального подхода:
Я начал coords.R с:
coords <- new.env()
with(coords, {
## Semi-major axis (center to equator)
a <- 6378137.0
## And so on...
})
with
заявление и отступы ясно показывают, что что-то другое о переменных назначения. И он уверен, что набирает два миллиона assign
заявлений.
Первое сокращение на функции выглядели как:
ecef2geodetic <- function (x,y,z) {
attach(coords)
on.exit(detach(coords))
on.exit()
гарантирует, что мы оставим coords
при выходе из нее. Но заявления attach()
вызвали проблемы, когда одна функция в coords
вызывала другую в coords
. См. this question, чтобы узнать, как обстоят дела.
Итак, java.lang.Math - это запах кода? Странный. –
@ApprenticeQueue Да, абсолютно. Java приняло решение о разработке классов как элементарной единицы кода. И хотя это, безусловно, упрощает некоторые вещи, это бессмыслица с семантической точки зрения. Классы и модули кода являются отдельными концепциями, и их объединение между ними не требуется для ООП (хотя многие пользователи Java считают это), и это не служит более масштабной цели. –
Эмуляция java.lang.Math - это то, что я имел в виду. Я боюсь, что несколько месяцев, потраченных на программирование на Java, возможно, повредили мой мозг. В любом случае, это дает мне несколько хороших идей, чтобы пожевать. –