在矢量化一些模拟代码的过程中,我遇到了内存问题.我在Windows XP下使用32位R版本2.15.0(通过RStudio版本0.96.122).我的机器有3.46 GB的RAM.
> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Matrix_1.0-6 lattice_0.20-6 MASS_7.3-18
loaded via a namespace (and not attached):
[1] grid_2.15.0 tools_2.15.0
Run Code Online (Sandbox Code Playgroud)
以下是问题的最小示例:
> memory.limit(3000)
[1] 3000
> rm(list = ls())
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1069761 28.6 1710298 45.7 1710298 45.7
Vcells …Run Code Online (Sandbox Code Playgroud) 我试图改变ggplot2中刻面点图的各个方面的绘图顺序,但我无法让它工作.这是我的融化数据集:
> London.melt
country medal.type count
1 South Korea gold 13
2 Italy gold 8
3 France gold 11
4 Australia gold 7
5 Japan gold 7
6 Germany gold 11
7 Great Britain & N. Ireland gold 29
8 Russian Federation gold 24
9 China gold 38
10 United States gold 46
11 South Korea silver 8
12 Italy silver 9
13 France silver 11
14 Australia silver 16
15 Japan silver 14
16 Germany silver 19
17 Great …Run Code Online (Sandbox Code Playgroud) 我正在尝试从以下网址的表中抓取数据:
http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033
Run Code Online (Sandbox Code Playgroud)
问题是包含在内的上标
<sup> </sup>
Run Code Online (Sandbox Code Playgroud)
标签.当我使用以下代码时(诚然不是很优雅)
url.overview <- "http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033"
overview <- readHTMLTable(overview)
overview <- overview[[2]]
overview <- overview[-1,]
f <- function(x){
out <- iconv(x, "latin1", "ASCII", sub="")
out <- gsub('[\\$,]', '', out)
out <- as.numeric(out)
return(out)
}
overview <- matrix(f(as.character(unlist(overview))), ncol = ncol(overview))
overview <- as.data.frame(overview)
names(overview) <- c('year', 'fires', 'civ.deaths', 'civ.injuries', 'ff.deaths',
'ff.injuries', 'damage.reported', 'damage.2010dollars')
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的东西,除了上标中的值被附加到表格单元格中的值的末尾.例如,(使用上面给出的URL中的行和列名称)2001年的平民死亡当它们应该是6196时存储为61963,因为上标3被解释为额外的数字.表中缺少上标的任何单元都完全正确.
经过几个小时努力完成文档后,我能够使用这些函数parseHTML并getNodeSet从XML包中识别出包含<sup>标签的所有节点,但无法弄清楚该做什么:
overview <- htmlParse(url.overview)
getNodeSet(overview, "//sup")
Run Code Online (Sandbox Code Playgroud)
我认为我需要删除XML树的这些部分,然后将结果传递回readHTMLTable进行进一步处理,但我无法弄清楚如何执行此操作.
我非常感谢你的想法.
我正在尝试在R中设置一种特殊的稀疏矩阵.下面的代码给出了我想要的结果,但速度非常慢:
library(Matrix)
f <- function(x){
out <- rbind(head(x, -1), tail(x, -1))
out <- bdiag(split(out, col(out)))
return(out)
}#END f
x <- outer(1:250, (1:5)/10, '+')
do.call(rBind, apply(x, 1, f))
Run Code Online (Sandbox Code Playgroud)
在我正在进行的模拟研究中,我需要做成千上万次,所以这是一个相当严重的瓶颈.在这种情况下,Rprof()输出非常混乱.我很感激您对如何加快速度提出的任何建议.
感谢您的时间.
这是一个C++函数,用于绘制N具有平均零和标准偏差的独立法向偏差s
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::export]]
List rnorm_cpp(double s, int N){
arma::colvec epsilon = s * arma::randn(N);
return List::create(Named("e") = epsilon);
}
Run Code Online (Sandbox Code Playgroud)
这是一个(几乎相同的)R版本
rnormR <- function(s, N){
epsilon <- rnorm(N, mean = 0, sd = s)
return(list(e = epsilon))
}
Run Code Online (Sandbox Code Playgroud)
采购后rnorm_cpp和rnormR我跑了以下内容:
set.seed(1234)
fooR <- rnormR(s = 5, N = 10)
set.seed(1234)
barR <- rnormR(s = 5, N = 10)
set.seed(1234)
fooCpp <- rnorm_cpp(s = 5, N = 10)
set.seed(1234) …Run Code Online (Sandbox Code Playgroud)