r - 如何计算 XML 文件中的数字(字符串格式)
问题描述
我有以下 XML 数据,我想做一个计算
<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
<numbers>...</numbers>
...
</data>
如上所述,有两个问题,一个是字符串格式的值,另一个问题是有不同类型的值,有些使用 +/-,有些使用范围。
从逻辑上讲,我知道该怎么做,只需使用 if-else 来检测不同的格式,例如:
if (tag "value" contains "+/-"):
Separate the string by "+/-", convert the number from string to number
use first number + last number to find the biggest number
use first number - last number to find the smallest number
if (tag "value" contains "-"):
Separate the string by "-", convert the number from string to number
first number is smallest number, last number is biggest number
if (tag "value" contains a "whole number"):
Just convert it into number format and done.
这就是编程的样子,我是一名学生,我目前正在自学 R 语言,我知道如何去做,但我不知道如何编码,也许有一些库或函数去做吧。
如果你知道怎么做,请帮助我,非常感谢你,我真的很感谢你的帮助:)
解决方案
h <- "<data>
<numbers>
<value>1 - 3</value>
</numbers>
<numbers>
<value>5 - 10</value>
</numbers>
<numbers>
<value>2.4 +/- 3.2</value>
</numbers>
<numbers>
<value>10</value>
</numbers>
</data>
"
h <- XML::xmlParse(h)
v <- XML::xpathSApply(h, "//value", XML::xmlValue)
lapply(v, function(x) {
if (stringr::str_detect(x,"\\+/-")) {
num1 <- stringr::str_extract(x, ".+(?=\\+/-)")
num2 <- stringr::str_extract(x, "(?<=\\+/-).+")
list(
"+" = sum(as.numeric(c(num1, num2))),
"-" = diff(as.numeric(c(num1, num2)))
)
} else {
eval(parse(text=v[1]))
}
})
推荐阅读
- css - Style Prime-ng dropdown child elements
- python - [Windows,python]如何让subprocee.Popen()启动的进程在父进程死亡时自动终止?
- java - Android:当 ImageView 没有图像时,防止进入下一个活动
- php - mysql上基于引导徽章颜色的数据
- ios - 移动到另一个屏幕时停止呈现呈现视图控制器
- javascript - 使用 JAVASCRIPT 从 Android 中的 TextBox 向应用程序发送文本
- java - scala for 循环生成器 - 在完成第二个循环后添加换行符
- python - 如何将 pprint 输出作为字符串而不打印在标准输出上?
- postgresql - 如何从 postgres 数据库中以 CSV 格式下载所有表
- travis-ci - Travis-CI 仅在所有构建完成后部署一次