Conversion des unités en R

Je voudrais convertir des unités impériales en unités métriques et vice versa dans R. Comment puis-je faire cela?

S'il n'y a pas de moyen actuel de le faire, Comment puis-je créer un paquet qui le ferait?

32
demandé sur Charles 2011-08-27 17:14:26

5 réponses

Je sais que c'est très tard, mais le paquet measurements a une fonction conv_unit() qui peut être ce que vous cherchez. Vous entrez la valeur impériale que vous avez, quelle unité vous convertissez (par exemple 'ft') et ce que vous voulez convertir en (par exemple 'km'). Il a une variété de dimensions différentes (pas seulement la longueur).

9
répondu CephBirk 2016-07-27 03:08:16

La nature des unités peut affecter la présence ou l'absence. En général je pense, malheureusement, que @gsk3 est correct. Il y a une fonction dans les paquets 'Hmisc', 'gdata' et 'marelac':

Définition d'un attribut units (pour plus que des objets time): http://finzi.psych.upenn.edu/R/library/Hmisc/html/units.html

Services médicaux: http://finzi.psych.upenn.edu/R/library/gdata/html/ConvertMedUnits.html

Index' marelac ' (principalement spécialisé dans océanographie) http://finzi.psych.upenn.edu/R/library/marelac/html/00Index.html

Température: http://finzi.psych.upenn.edu/R/library/marelac/html/convert_T.html

Barométrique: http://finzi.psych.upenn.edu/R/library/marelac/html/convert_p.html

Le Paquet "dielectric" a été mentionné par @ Brian Diggs dans une réponse à une question similaire: lien vers la page d'aide' constantes 'du paquet' dielectric '

Je pense que ceux-ci fourniront des exemples de le faire et la fonction package.skeleton devraient aider à la mécanique de la création de paquets. Je pense que le paquet serait un ajout bienvenu.

Update: le paquet' udunits2 ' a été mentionné par Gabor Grothendieck dans une question similaire à rhelp le 23 juillet 2012. Il semble nécessiter l'installation d'un package autonome spécifique au système d'exploitation du même nom. Sans une telle installation, vous obtenez un message d'erreur plutôt inutile:

> ud.convert(1, "miles", "km")  
Error in ud.convert(x, "miles", "km") : 
  Units miles and km are not convertible
24
répondu 42- 2012-07-25 00:32:13

Il y a les fonctions unit() et convertUnit() dans le paquet grid pour spécifier différentes unités de longueur et de dimension. Cela peut faire ce que vous voulez, ou vous donner un endroit pour commencer sinon.

7
répondu Greg Snow 2011-08-27 17:42:58

Le udunits2 le paquet fait exactement cela. Il enveloppe la puissante bibliothèque UDUNITS :

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

En plus de cela, la units paquet (travaux en cours), vise à fournir un système de sécurité pour faire de l'arithmétique avec les unités:

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
3
répondu krlmlr 2016-09-13 12:54:23

Il existe un "nouveau" paquet r appelé units aujourd'hui, qui a été construit sur le paquet udunits2 R, qui est disponible il y a quelque temps.

Jetez un oeil à: https://cran.r-project.org/web/packages/units/vignettes/units.html#setting-units-unit-conversion

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
3
répondu Marco 2017-02-10 14:08:24