我想从英制单位转换为公制单位,反之亦然。我该怎么做呢?
如果当前没有这样做的方法,我如何创建一个可以这样做的包?
编辑:现在有一个百科全书单元包: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