小编use*_*988的帖子

如何在R中以并行方法使用无效记录器进行记录?

我在R中使用无效记录器进行记录.我有一个在R中使用降雪实现的并行算法.并行过程的每个核心都在记录器中记录一个中间输出.但是这个输出没有出现在记录器中?

我们可以使用无效记录器从并行作业中使用降雪进行记录吗?

添加如何完成:

我的具体情况有点不同.我使用我创建的共享对象从R调用C函数.该函数是一个迭代算法,我需要每隔几次迭代记录输出.我有兴趣从C函数记录到无效记录器.为什么徒劳的记录器?因为这是Web应用程序的一部分,所以用户会话的所有输出都以一致的格式出现是有意义的.

这是我根据接受的答案遵循的一般方法.

# init script
# iter logger namespace global variable
assign("MCMC_LOGGER_NAMESPACE", "iter.logger", envir = .GlobalEnv)  

loginit <- function(logfile) { 
  require('futile.logger')
  flog.layout(layout.simple, name = ITER_LOGGER_NAMESPACE)  
  flog.threshold(TRACE, name = ITER_LOGGER_NAMESPACE)
  flog.appender(appender.file(logfile), name = ITER_LOGGER_NAMESPACE)   
  NULL
}

parallel_funct_call_in_R <- function(required args) {    
require('snowfall')  
sfSetMaxCPUs() 
sfInit(parallel = TRUE, cpus = NUM_CPU) 
sfLibrary(required libs)
sfExport(required vars including logger namespace variable ITER_LOGGER_NAMESPACE)
iterLoggers = sprintf(file.path(myloggingdir, 'iterativeLogger_%02d.log', fsep = .Platform$file.sep), seq_len(NUM_CPU))
sfClusterApply(iterLoggers, loginit)  
sfSource(required files)
estimates <- sfLapply(list_to_apply_over, func_callling_C_from_R, required args)
sfStop()  
return(estimates) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing logging r snowfall

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

在C中运行嵌入式R.

我写了一段C代码,声明了一个大小为4x4的方阵.然后它从R rgig中的包GeneralizedHyperbolic中调用的采样函数中采样.它使用来自gnu的gsl库反转矩阵并吐出结果.这是从C调用R的练习.

#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stddef.h>

// for gsl
#include <gsl/gsl_machine.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_cdf.h>
#include <gsl/gsl_cblas.h>
#include <gsl/gsl_sf_gamma.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
#include <gsl/gsl_linalg.h>

// for R embedding in C
#include <Rinternals.h>
#include <Rdefines.h>
#include <Rembedded.h>
#include <R_ext/Parse.h>

void gsl_square_matrix_inverse (gsl_matrix *, gsl_matrix *, int);
SEXP get_rInvGauss(void);

int main(void)
{
    // Define the dimension n of the matrix
    // and the signum s (for LU decomposition) …
Run Code Online (Sandbox Code Playgroud)

c r s-expression

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

使用C和并行化在R中快速相关

我今天的项目是使用我拥有的基本技能在R中编写一个快速关联例程.我必须找到几乎400个变量之间的相关性,每个变量有近百万个观测值(即大小为p = 1MM行且n = 400个cols的矩阵).

R的原生相关函数对于1MM行需要近2分钟,每个变量需要200个观察值.我没有每列运行400次观察,但我的猜测是需要将近8分钟.我完成它的时间不到30秒.

因此,我想做的事情.

1 - 在C中编写一个简单的相关函数,并将其平行应用于块中(见下文).

2 - 块 - 将相关矩阵分成三个块(大小为K*K的左上方,大小的右下方(pK)(pK)和大小为K(pK)的右上方矩阵).这涵盖了相关矩阵中的所有单元,corr因为我只需要上三角形.

3 - 使用降雪并行地通过.C调用运行C功能.

n = 100
p = 10
X = matrix(rnorm(n*p), nrow=n, ncol=p)
corr = matrix(0, nrow=p, ncol=p)

# calculation of column-wise mean and sd to pass to corr function
mu = colMeans(X)
sd = sapply(1:dim(X)[2], function(x) sd(X[,x]))

# setting up submatrix row and column ranges
K = as.integer(p/2)

RowRange = list()
ColRange = list()
RowRange[[1]] = c(0, …
Run Code Online (Sandbox Code Playgroud)

c r correlation snowfall

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

使用 glm.fit、bigglm、speedglm、glmnet、LiblineaR 对逻辑回归进行基准测试

我正在模拟数据并比较 glm.fit , bigglm, speedglm, glmnet, LiblineaR 的二进制 logit 模型。

testGLMResults_and_speed <- function(N, p, chunk=NULL, Ifsample=FALSE, size=NULL, reps=5){

  library(LiblineaR)
  library(speedglm)
  library(biglm)
  library(glmnet)

  # simulate dataset
  X = scale(matrix(rnorm(N*p), nrow=N, ncol=p))
  X1 = cbind(rep(1, N), X)
  q = as.integer(p/2)
  b = c(rnorm(q+1), rnorm(p-q)*10)
  eta = X1 %*% b

  # simulate Y
  simy <- function(x){
    p = 1/(1 + exp(-eta[x]))
    u = runif(1, 0, 1)
    return(ifelse(u<=p, 1, 0))
  }

  Y = sapply(1:N, simy)
  XYData = as.data.frame(cbind(y=Y, X))

  getSample <- function(X, Y=NULL, size){ …
Run Code Online (Sandbox Code Playgroud)

r glm glmnet logistic-regression

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

如何在R中的调用函数环境中获取对象?

test <- function(){    
a = 3
b = c(1,2,3)
c = matrix(-99, 3, 4)
print(getObjects())
}

getObjects <- function(){
return(ls(pos=1))
}
Run Code Online (Sandbox Code Playgroud)

我希望函数测试仅打印出a,b,c,因为这些是函数test()范围内的唯一对象(在这种情况下,它可以打印测试访问的其他对象/函数,例如getObjects() )。但是pos没有选择给我的吗?有没有一种方法可以在“调用”函数(此处为测试)中获取对象,以便对它进行一些操作,而“被调用”函数(此处为getObjects)可以返回结果。我的函数getObjects应该对通过执行ls()获得的对象进行操作。

environment ls r object

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

如何在R文件中列出所有函数及其参数?

是否有一个R函数列出R脚本文件中的所有函数及其参数?

即表格的输出:

func1(var1, var2)
func2(var4, var10)
.
.
.
func10(varA, varB)
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
2
解决办法
403
查看次数

python闭包中的cell_contents

cell_contents是否在python中调用了闭包?我知道func_closure不起作用__closure__.

func.__closure__.cell_contents
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'cell_contents'
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 3.4.1.

python closures

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