Преобразование единиц в R - PullRequest
37 голосов
/ 27 августа 2011

Я бы хотел перевести из имперских единиц в метрические и наоборот в R. Как мне это сделать?

Если в настоящее время нет способа сделать это, как я могу создать пакет, которыйбудет?

Ответы [ 5 ]

24 голосов
/ 27 августа 2011

Характер юнитов может влиять на наличие или отсутствие.В общем, я думаю, к сожалению, что @ gsk3 является правильным.В пакетах «Hmisc», «gdata» и «marelac» есть некоторые функции:

Установка атрибута единиц (для более чем просто объектов времени): http://finzi.psych.upenn.edu/R/library/Hmisc/html/units.html

Medical:http://finzi.psych.upenn.edu/R/library/gdata/html/ConvertMedUnits.html

Индекс 'marelac' (в основном специализируется на океанографии) http://finzi.psych.upenn.edu/R/library/marelac/html/00Index.html

Температура: http://finzi.psych.upenn.edu/R/library/marelac/html/convert_T.html

Барометрический: http://finzi.psych.upenn.edu/R/library/marelac/html/convert_p.html

Пакет «диэлектрик» был упомянут @Brian Diggs в ответ на похожий вопрос: Ссылка на страницу помощи «констант» в пакете «диэлектрик»

Я думаю, что они приведут примеры выполнениятак и функция package.skeleton должна помочь с механикой создания пакета.Я думаю, что пакет будет долгожданным дополнением.

Обновление: Пакет 'udunits2' был упомянут Габором Гротендиком в подобном вопросе, чтобы помочь 23 июля 2012 года. Похоже, требуется установка автономной ОС-специфичная упаковка с одноименным названием.Без такой установки вы получите довольно бесполезное сообщение об ошибке:

> ud.convert(1, "miles", "km")  
Error in ud.convert(x, "miles", "km") : 
  Units miles and km are not convertible
10 голосов
/ 29 августа 2014

Я знаю, что это очень поздно, но пакет measurements имеет функцию conv_unit(), которая может быть тем, что вы ищете. Вы вводите имперское значение, которое у вас есть, в какую единицу измерения вы переводите (например, «футы») и в какие единицы вы хотите преобразовать (например, «км»). Он имеет различные размеры (не только длину).

7 голосов
/ 27 августа 2011

В пакете grid есть функции unit() и convertUnit() для указания различных единиц длины и размеров.Это может делать то, что вы хотите, или дать вам место, если нет.

5 голосов
/ 10 февраля 2017

Сегодня существует "новый" R-пакет, называемый unit , который был построен на пакете udunits2 R, который доступен некоторое время назад.

Естьсмотрите: https://cran.r -project.org / web / packages / units / vignettes / units.html # setting-unit-unit-translation

library(units)
(spd1 = 1:5 * with(ud_units, m/s))
##Units: m/s
##[1] 1 2 3 4 5

(spd2 = 1:5 * with(ud_units, km/h))
#Units: km/h
#[1] 1 2 3 4 5

spd1 + spd2                   # automatic conversion
#Units: m/s
#[1] 1.277778 2.555556 3.833333 5.111111 6.388889

spd1 * spd2                   # unit derivation
#Units: km*m/h/s
#[1]  1  4  9 16 25

spd1 * 10 * with(ud_units, s) # unit simplification
#Units: m
#[1] 10 20 30 40 50

spd1 + 10 * with(ud_units, s) # error checking
#Error in `units<-.units`(`*tmp*`, value = list(numerator = "m", denominator = "s")) : 
cannot convert s into m/s
5 голосов
/ 13 сентября 2016

Пакет udunits2 делает именно это. Он содержит мощную библиотеку UDUNITS :

udunits2::ud.convert(1, "mi", "km")
## [1] 1.609344

Кроме того, пакет units (в стадии разработки) направлен на обеспечение безопасной для типов системы для выполнения арифметики с единицами измерения:

with(ud_units, 1 * mi + 2 * km)
## 2.242742 mi
with(ud_units, 100 * km / (2 * h))
## 50 km/h
with(ud_units, 1 * mi + 2 * lb)
## Error: cannot convert lb into mi
...