在 R 中使用降雪包做一些模拟

Posted

技术标签:

【中文标题】在 R 中使用降雪包做一些模拟【英文标题】:Using snowfall package in R to do some simulation 【发布时间】:2018-11-17 18:01:48 【问题描述】:

我正在以这种方式盯着降雪包工作:

library(snowfall)
sfInit(parallel=TRUE, cpus=6, type="SOCK")
#loading packages
sfLibrary(package = lars)
sfLibrary(package=covTest) 

我想使用 sfLapply 多次计算的函数:

funkcja <- function(i,k=5)

  beta <- c(k,k,0,k,k,rep(0,35))
  X <- matrix(rnorm(100*40),100,40)
  Y <- X%*%beta+rnorm(100)
  lasso.lars <- lars(X,Y,intercept=FALSE,use.Gram=FALSE)
  test <- covTest(lasso.lars,X,Y,sigma.est=1)
  test

但是当我尝试这个时

sfLapply(1:100,funkcja)

我得到错误: “checkForRemoteErrors(val) 中的错误:6 个节点产生错误;第一个错误:找不到对象‘Y’”。但是当我隐藏最后一行并更改 lasso.lars 的测试时,向量 Y 就不再有问题了:

funkcja <- function(i,k=5)

  beta <- c(k,k,0,k,k,rep(0,35))
  X <- matrix(rnorm(100*40),100,40)
  Y <- X%*%beta+rnorm(100)
  lasso.lars <- lars(X,Y,intercept=FALSE,use.Gram=FALSE)
  #test <- covTest(lasso.lars,X,Y,sigma.est=1)
  lasso.lars

我不明白这是因为这条线

test <- covTest(lasso.lars,X,Y,sigma.est=1)

应该可以工作

lars(X,Y,intercept=FALSE,use.Gram=FALSE)

可以工作。我会很感激你的帮助。

【问题讨论】:

【参考方案1】:

我的猜测是 Y 是隐藏的内部变量。以下函数有效(将“Y”的大小写更改为“y”)

funkcja <- function(i,k=5)

  beta <- c(k,k,0,k,k,rep(0,35))
  X <- matrix(rnorm(100*40),100,40)
  y <- X %*% beta + rnorm(100)

  lasso.lars <- lars(X,y,intercept=FALSE,use.Gram=FALSE)
  test <- covTest(lasso.lars,X,y,sigma.est=1)
  test

【讨论】:

谢谢,现在它可以工作了。你有什么可以隐藏 Y 的建议吗?

以上是关于在 R 中使用降雪包做一些模拟的主要内容,如果未能解决你的问题,请参考以下文章

R降雪环境问题

R 中的 sfInit() 降雪包在 Windows 7 上挂起

如何在降雪时输出消息?

在 AWS 中使用雪(和降雪)在 R 中进行并行处理

R 降雪:并行应用于表格列

R:在doParallel /降雪中制作集群挂起