小编Ale*_*x W的帖子

减少R中的内存消耗 - 通过reference/data.table传递

通过将子集操作从基本data.frame操作转移到data.table操作,我已经实现了大幅加速(~6.5倍).但我想知道我是否可以在记忆方面得到任何改善.

我的理解是R本身并没有通过参考传递(例如,见这里).所以,我正在寻找一种方法(没有重写复杂的函数Rcpp)来做到这一点.data.table提供了一些改进[ 在编辑我的问题后包括@joshua ulrich在下面捕获的拼写错误 ].但是如果可能的话,我正在寻找更大的改进.

  • 另一种选择可能是R.oo包,虽然我还没有找到一个好的教程.(我还是需要读这个.
  • 引用类帮助呢?

在我的实际使用案例中,我正在通过模拟退火进行多个数据集的并行仿真.由于开发时间的增加和技术债务的增加,我宁愿不在Rcpp中重写模拟退火和损失函数计算.

问题示例:

我主要关心的是从数据集中删除一些观察子集并添加另一个观察子集.这里给出了一个非常简单(荒谬)的例子.有没有办法减少内存使用量?我当前的用法似乎是按值传递,因此内存使用量(RAM)大约翻了一番.

library(data.table)
set.seed(444L)

df1 <- data.frame(matrix(rnorm(1e7), ncol= 10))
df2 <- data.table(matrix(rnorm(1e7), ncol= 10))

prof_func <- function(df) {
  s1 <- sample(1:nrow(df), size= 500, replace=F)
  s2 <- sample(1:nrow(df), size= 500, replace=F)
  return(rbind(df[-s1,], df[s2,]))
}

dt_m <- df_m <- vector("numeric", length= 500L)

for (i in 1:500) {

  Rprof("./DF_mem.out", memory.profiling = TRUE)
  y <- …
Run Code Online (Sandbox Code Playgroud)

r pass-by-reference data.table

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

使用betareg时出现“由optim提供的非限定值”错误

我正在使用软件包进行beta回归,但是收到以下错误:

optim中的错误(par =开始,fn = loglikfun,gr = gradfun,方法=方法,:由optim提供的非有限值

我可以将此错误追溯到为创建初始值optim。具体地,这些线betareg.fit,其使用lm.wfit生成的起始值。

事实证明,返回的起始值之一与NA我的数据集一样。我不确定为什么会这样,因为在的数据/输入中没有缺失值lm.wfit

可复制的示例,不适用

## data -- a sample of 100 obs from my actual data
nobs <- 100L
w <- rep(1, nobs)
offset <- rep(0, nobs)
y <- stats::rbeta(nobs, 0.75, 1.658)
x <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

regression r mathematical-optimization betareg

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

SAS宏做循环 - 导入多个平面文件

我有一个17个平面文件的列表,我试图导入到不同的数据集.所有文件都有相同的数据步骤,所以我正在尝试编写一个do while循环来导入所有文件.

我一直试图从这里调整一些代码而没有成功:http: //www.sas.com/offices/europe/uk/support/sas-hints-tips/tips-enterprise-csv.html

http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543785.htm

我收到的错误是说的%do statement is not valid in open code.这是我的代码:

% let path1 = 'c:\path1'
% let path2 = 'c:\path2'
...
% let pathN = 'c:\pathN' 

%let n=1; 

%do %while (&n <= 17);
%let pathin = &path&n;

  data retention&n;
    infile &pathin;
    <data step-->
  run;

%let n=%eval(&n+1); 
%end;
Run Code Online (Sandbox Code Playgroud)

我已经在do-while循环之外测试了数据步骤,并且使用%let pathin = &path&n代码一次可以正常处理1个文件.代码仍然为第一个数据集写入数据文件; 但是,我需要能够遍历所有文件,无法弄清楚如何.对不起,如果这是一个新手问题; 我只是在学习SAS.

谢谢,-Alex

import macros sas sas-macro

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

dyn.load(dllfile) 中的错误 - 构建链接到 Rcpp 的包时出现问题

我的软件包无法安装在我的机器上或 travis-ci.org 上。CRAN 版本的唯一更新是我添加了一个小插图。我一直在关注Rcpp - packageR-packages的示例;编译后的代码

\n\n

该错误与之前的这些问题相关,但不是重复的。

\n\n
    \n
  1. Q40922814——这里的问题是同时使用了 C 和 C++ 代码。我只使用C++代码
  2. \n
  3. Q36952571 - 我使用的是 Mac 操作系统,因此无法访问ldconfig,尽管也许我的问题与之相关。
  4. \n
\n\n

错误:

\n\n

从包目录:

\n\n
# Restarting R session...\n> Rcpp::compileAttributes()\n> devtools::document()     # a similar error using devtools::install()\nUpdating imputeMulti documentation\nLoading imputeMulti\nRe-compiling imputeMulti\n\xe2\x94\x80  installing *source* package \xe2\x80\x98imputeMulti\xe2\x80\x99 ...\n   ** using staged installation\n   ** libs\n   g++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG  -I"/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include" -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include  -fPIC  -std=c++0x -c RcppExports.cpp -o RcppExports.o\n   g++ -I"/Library/Frameworks/R.framework/Resources/include" …
Run Code Online (Sandbox Code Playgroud)

r rcpp r-package

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