R 打印带有相应单位的单位编号

R print a units number with the respective unit

提问人:Honeybear 提问时间:10/23/2023 最后编辑:Honeybear 更新时间:10/23/2023 访问量:43

问:

我有一个使用带有单位的数字参数的脚本。将消息打印到日志/用户时,我希望打印添加相应的单位。 我希望 R 在执行以下操作时足够聪明:

library(units)

min_size = set_units(1200, "m^2")
print(paste0("Must be at least ", min_size))

# Prints: "Must be at least 1200"
# I want: "Must be at least 1200 m^2")

# ideally without explicitly adding " m^2", to avoid code inconsistency when changing units
print(paste0("Must be at least ", min_size, " m^2"))
r 计量单位

评论

1赞 jay.sf 10/23/2023
你应该指定从哪里来,显然是那个包不够聪明。set_units
0赞 Roland 10/23/2023
如果你了解 S3 类,你就会知道为什么它不能“足够聪明”。
0赞 Honeybear 10/23/2023
@jay.sf 感谢您的建议,我添加了包(单位)。您的评论表明有一个软件包默认打印该单元......如果是这种情况,您可能需要将其添加为(替代)答案:)
1赞 Konrad Rudolph 10/23/2023
@Roland 你能解释一下你所说的“不可能”是什么意思吗?显然,该软件包可以轻而易举地为该方法提供合适的实现。事实上,该软件包确实提供了 的方法。我不知道为什么软件包作者决定不附加该单元(我假设有充分的理由,因为作者知识渊博——话又说回来,我粗略地看一下就会发现一些微不足道的代码质量问题!)但这不是 S3 系统的技术限制。as.character.unitsas.character
1赞 Roland 10/23/2023
你是对的,这是可行的。但是附加一个单元不是我会做出的选择。 存在是有原因的。as.characterformat

答:

0赞 Honeybear 10/23/2023 #1

简单的答案是用于获取单位的可打印表示。units(min_size)

print(paste0("Must be at least ", min_size, " ", units(min_size)))

评论

4赞 Roland 10/23/2023
您可以像这样使用: .formatunits_options(group = c("", "")); print(paste0("Must be at least ", format(min_size)))
1赞 user2554330 10/23/2023 #2

您有几种解决方法:显式打印单位,或用于自动附加单位。format()

我将尝试回答为什么您最初的尝试(依靠进行格式化)不起作用的问题。paste0()

paste0()使用 将对象转换为字符串。一般来说,这不是你应该用来获得漂亮显示的方法。例如,给出 ,忽略用户的设置。当您希望以用户友好的方式显示内容时,请使用进行转换。例如,给出 .as.character()as.character()as.character(pi)"3.14159265358979"options("digits")format()format(pi)"3.141593"

那么为什么不使用呢?因为四舍五入时会丢失很多信息。您无法从生成的字符串中取回它。另一方面,损失更少。(它确实丢失了一些信息; 不等于 ,并使用默认方法,因此会丢失单位信息。paste0()format()format()as.character()as.numeric(as.character(pi))pias.character(min_size)

我希望这有助于解释正在发生的事情。