小编min*_*nem的帖子

为什么type.convert不能将存储为数字的大"整数"转换为整数?

class(type.convert(as.numeric(1e3)))
# [1] "integer"
class(type.convert(as.numeric(1e4)))
# [1] "integer"
class(type.convert(as.numeric(1e5)))
# [1] "numeric"
class(type.convert(as.numeric(1e6)))
# [1] "numeric"
Run Code Online (Sandbox Code Playgroud)

为什么较大的那些没有转换为整数?还有很多事要做:

.Machine$integer.max
# [1] 2147483647
Run Code Online (Sandbox Code Playgroud)

也许答案可以typeconvertGitHub的C源代码中找到?不幸的是我对C很不熟悉.

r

7
推荐指数
1
解决办法
106
查看次数

R:摆脱for循环和加速代码

我想加快我的计算并获得结果而不使用函数循环m.可重复的例子:

N <- 2500
n <- 500
r <- replicate(1000, sample(N, n))

m <- function(r, N) {
  ic <- matrix(0, nrow = N, ncol = N)
  for (i in 1:ncol(r)) { 
    p <- r[, i]
    ic[p, p] <- ic[p, p] + 1
  }
  ic
}

system.time(ic <- m(r, N))
#  user  system elapsed 
#  6.25    0.51    6.76 
isSymmetric(ic)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

在循环的每次迭代中,for我们都处理矩阵而不是向量,那么如何进行矢量化?

@ joel.wilson此函数的目的是计算元素的成对频率.所以之后我们可以估计成对包含概率.

感谢@Khashaa和@alexis_laz.基准:

> require(rbenchmark)
> benchmark(m(r, N),
+           m1(r, N),
+           mvec(r, N), …
Run Code Online (Sandbox Code Playgroud)

performance loops r matrix

6
推荐指数
1
解决办法
285
查看次数

将大而复杂的XML文件解析为data.frame

所以,我有大量的XML文件,包含大量报告.我在下面创建了数据示例,以大致显示xml的大小及其结构:

x <- "<Report><Agreements><AgreementList /></Agreements><CIP><RecordList><Record><Date>2017-05-26T00:00:00</Date><Grade>2</Grade><ReasonsList><Reason><Code>R</Code><Description>local</Description></Reason></ReasonsList><Score>xxx</Score></Record><Record><Date>2017-04-30T00:00:00</Date><Grade>2</Grade><ReasonsList><Reason><Code>R</Code><Description/></Reason></ReasonsList><Score>xyx</Score></Record></RecordList></CIP><Individual><Contact><Email/></Contact><General><FirstName>MM</FirstName></General></Individual><Inquiries><InquiryList><Inquiry><DateOfInquiry>2017-03-19</DateOfInquiry><Reason>cc</Reason></Inquiry><Inquiry><DateOfInquiry>2016-10-14</DateOfInquiry><Reason>er</Reason></Inquiry></InquiryList><Summary><NumberOfInquiries>2</NumberOfInquiries></Summary></Inquiries></Report>"

x <- paste(rep(x, 1.5e+5), collapse = "")
x <- paste0("<R>", x, "</R>")
require(XML)
p <- xmlParse(x)
p <- xmlRoot(p)
p[[1]]
Run Code Online (Sandbox Code Playgroud)

我想将这些数据转换为data.frame,但XML的结构并不简单.以前使用XML我创建了循环,每个报告将其子节点转换为data.frame,但是这里(在此数据中)子节点数大于30(并未将所有这些都放在示例中),并且结构不同(列表节点在XML中甚至可以出现2级深度).

所以我几乎没有问题:

1)我确信循环报告不是处理此问题的最佳方法.我该如何处理这个问题?

2)我可以以某种方式提取一个报告的所有数据两行一行data.frame(递归可能)?

3)或者我可以为XML的每个列表对象自动创建单独的data.frames吗?

任何帮助将非常感激.

更新:

结果示例可能如下所示:

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1 obs. of  17 variables:
 $ Record.1.Date                : chr "2017-05-26T00:00:00"
 $ Record.1.Grade               : num 2
 $ Record.1.Reason.1.Code       : chr "R"
 $ Record.1.Reason.1.Description: chr "local"
 $ Record.1.Score               : chr "xxx"
 $ Record.2.Date                : chr "2017-05-26T00:00:00"
 $ Record.2.Grade               : num 2
 $ Record.2.Reason.1.Code       : …
Run Code Online (Sandbox Code Playgroud)

xml performance r xml-parsing xml2

1
推荐指数
1
解决办法
2073
查看次数

标签 统计

r ×3

performance ×2

loops ×1

matrix ×1

xml ×1

xml-parsing ×1

xml2 ×1