我正在尝试从XML文件中读取Ydata。包含Ydata的Base64字符串是1245个元素的数字向量,存储在数据$ ATR中。该文件已根据gaml.org标准进行编码。
整天尝试了太多的事情,但没有一件事在工作......不会在这里发布我尝试过的无数件事,但这些事情都行不通。我没有想法。如何将其转换为R数字向量?
library(XML)
x = XML::xmlTreeParse("http://utsav.podzone.net/T0011VAP1.0.xml")
xmltop = xmlRoot(x)
data = xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue))
(data$ATR)
从一个独立的消息来源,我知道Ydata的前10个元素是:
-0.0903
-0.0751
-0.0605
-0.0471
-0.0353
-0.0249
-0.0159
-0.0082
-0.0017
0.0035
答案 0 :(得分:0)
我无权访问该网址(公司过滤),但此示例可能有所帮助:
实际的样本XML是
<root>
<value>123</value>
<value>234</value>
<value>345</value>
</root>
编码为
PHJvb3Q+DQo8dmFsdWU+MTIzPC92YWx1ZT4NCjx2YWx1ZT4yMzQ8L3ZhbHVlPg0KPHZhbHVlPjM0NTwvdmFsdWU+DQo8L3Jvb3Q+
以及访问XML的代码:
library("RCurl")
library("XML")
tmp <- "PHJvb3Q+DQo8dmFsdWU+MTIzPC92YWx1ZT4NCjx2YWx1ZT4yMzQ8L3ZhbHVlPg0KPHZhbHVlPjM0NTwvdmFsdWU+DQo8L3Jvb3Q+";
xml <- base64(tmp, encode=FALSE)
x = XML::xmlTreeParse(xml)
xmltop = xmlRoot(x)
data = xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue))
答案 1 :(得分:0)
这是一个丑陋的文件;-)它看起来是从these guys输出的。
在数据文件中使用此XML标记中的numvalues
:
<values byteorder="INTEL" format="FLOAT32" numvalues="1245">
如果你这样做:
library(base64enc)
head(readBin(base64decode(data$ATR), "double", 1245, 4), 10)
我假设1245
为numvalues
作为二进制字段中浮点数的数量 - 这被证明是一个很好的假设。
它给出了:
## [1] -0.090307593 -0.075070500 -0.060486197 -0.047122478 -0.035274029 -0.024934530 -0.015949965 -0.008214951
## [9] -0.001725793 0.003505349
这个输出很好地跟踪了你已知的10个元素。
readBin
调用表示使用double
作为其返回的向量的模式(数据类型),4
是每个元素的字节数。
您可能需要将endian="little"
作为参数添加到readBin
,具体取决于您的体系结构(至少我认为可能是这种情况......我发现readBin
低于确定性-OS在使用它来读取色样文件但我确信CRAN guaRdians会因为质疑它的行为而责备我。)