我在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) 我写了一段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) 我今天的项目是使用我拥有的基本技能在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) 我正在模拟数据并比较 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) 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()获得的对象进行操作。
是否有一个R函数列出R脚本文件中的所有函数及其参数?
即表格的输出:
func1(var1, var2)
func2(var4, var10)
.
.
.
func10(varA, varB)
Run Code Online (Sandbox Code Playgroud) 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.
r ×6
c ×2
snowfall ×2
closures ×1
correlation ×1
environment ×1
glm ×1
glmnet ×1
logging ×1
ls ×1
object ×1
python ×1
s-expression ×1