web-dev-qa-db-ja.com

Rでの単位の変換

Rでインペリアル単位からメートル法に、またはその逆に変換したいのですが、どうすればよいですか?

それを行う現在の方法がない場合、どうすればそうなるパッケージを作成できますか?

39
thequerist

これは非常に遅いことは知っていますが、パッケージmeasurementsには関数conv_unit()があります。これはあなたが探しているものかもしれません。持っているインペリアル値、変換元の単位(例:「ft」)、変換先の単位(例:「km」)を入力します。それは(長さだけでなく)さまざまな異なる寸法を持っています。

12
CephBirk

ユニットの性質は、存在または不在に影響を与える可能性があります。一般的に、残念ながら、@ gsk3は正しいと思います。 'Hmisc'、 'gdata'、および 'marelac'パッケージにはいくつかの関数があります。

単位属性の設定(時間オブジェクト以外の場合): http://finzi.psych.upenn.edu/R/library/Hmisc/html/units.html

医療: 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

パッケージ「dielectric」は、同様の質問への回答で@Brian Diggsによって言及されました: パッケージ「dielectric」の「constants」ヘルプページへのリンク

それらはそうする例を提供すると思います、そして関数package.skeletonはパッケージ作成の仕組みに役立つはずです。パッケージは歓迎すべき追加だと思います。

更新:「udunits2」パッケージは、2012年7月23日のrhelpと同様の質問で、GaborGrothendieckによって言及されました。同じ名前のスタンドアロンOS固有のパッケージをインストールする必要があるようです。このようなインストールがないと、役に立たないエラーメッセージが表示されます。

> ud.convert(1, "miles", "km")  
Error in ud.convert(x, "miles", "km") : 
  Units miles and km are not convertible
25
42-

gridパッケージには、さまざまな長さと寸法の単位を指定するためのunit()関数とconvertUnit()関数があります。それはあなたが望むことをするかもしれません、あるいはそうでなければあなたに始める場所を与えるかもしれません。

7
Greg Snow

今日、unitsと呼ばれる「新しい」Rパッケージがあります。これはudunits2少し前に入手可能だったRパッケージ。

ご覧ください: 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
6
Marco

udunits2 パッケージはまさにそれを行います。強力な DUNITSライブラリ をラップします:

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
5
krlmlr