在R中转换单位



我想从英制单位转换为公制单位,反之亦然。我该怎么做呢?

如果当前没有这样做的方法,我如何创建一个可以这样做的包?

编辑:现在有一个百科全书单元包:NISTunits

单位的性质可能影响存在或不存在。总的来说,不幸的是,我认为@gsk3是正确的。在'Hmisc', 'gdata'和'marelac'包中有一些函数:

设置units属性(不仅仅是time对象):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在回答类似问题时提到:链接到'介电'包中的'常量'帮助页

我认为这些将提供这样做的示例,函数package.skeleton应该有助于创建包的机制。我想这个包会是一个受欢迎的补充。

更新:2012年7月23日,Gabor Grothendieck在一个类似的问题中提到了"udunits2"包。它似乎需要安装一个同名的独立的特定于os的包。如果没有这样的安装,您将得到一个相当无用的错误消息:

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

我知道这很晚了,但是包measurements有一个功能conv_unit(),可能是您正在寻找的。你输入你的英制值,你要转换的单位(例如。'ft')和你想转换成的格式(例如:"公里")。它有各种不同的维度(不仅仅是长度)。

grid包中有unit()convertUnit()函数,用于指定不同的长度和尺寸单位。这可能是你想要的,或者给你一个开始的地方。

现在有一个名为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

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

最新更新