在R中转换单位

the*_*ist 38 r units-of-measurement

我希望在R中将英制单位转换为公制单位,反之亦然.我该怎样做呢?

如果没有当前的方法,我怎么能创建一个包呢?

42-*_*42- 25

单位的性质可能会影响是否存在.总的来说,我认为,不幸的是,@ 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

@Brian Diggs在回答类似问题时提到了"电介质"封装: 链接'constants'帮助页面封装'电介质'

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

更新:Gabor Grothendieck在2012年7月23日发布的类似问题中提到了'udunits2'软件包.它似乎要求安装一个独立的OS专用软件包.如果没有这样的安装,您将收到一条相当无用的错误消息:

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

  • `udunits2` 软件包(和底层软件)非常强大;在 ubuntu 上,可以使用“sudo apt-get install udunits-bin libudunits2-dev”安装软件包依赖项。然后你可以做像 `ud.convert(1, "miles/hr", "km/s")` 甚至 `ud.convert(1, "Mg/ha/yr", "kg/m2/d" )` 并且它有一个庞大的单位同义词数据库。 (2认同)

Cep*_*irk 12

我知道这已经很晚了,但是这个软件包measurements有一个conv_unit()可能正是你正在寻找的功能.您输入您拥有的英制值,您要转换的单位(例如'ft')和您想要转换的单位(例如'km').它有各种不同的尺寸(不仅仅是长度).


Gre*_*now 7

网格包中有unit()convertUnit()函数用于指定不同的长度和尺寸单位.这可能会做你想要的,或者如果没有,你就可以开始.

  • @David,`grid`包不再在CRAN上,因为它现在是安装R的软件包之一,无需从CRAN单独下载. (2认同)

Mar*_*rco 6

今天有一个名为unit的“新” 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
Run Code Online (Sandbox Code Playgroud)

  • 这变得更好:`spd2 = 1:5 %&gt;% set_units(mile)`,然后`spd2 %&gt;% set_units(km)`结果为:`Units: [km] [1] 1.609344 3.218688 4.828032 6.437376 8.046720` (2认同)

krl*_*mlr 5

udunits2软件包就是这样做的。它包装了功能强大的UDUNITS库

udunits2::ud.convert(1, "mi", "km")
## [1] 1.609344
Run Code Online (Sandbox Code Playgroud)

最重要的是,该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
Run Code Online (Sandbox Code Playgroud)