$ 使用 snowFall 的问题
Posted
技术标签:
【中文标题】$ 使用 snowFall 的问题【英文标题】:problems with $ using snowFall 【发布时间】:2013-12-24 08:16:44 【问题描述】:我正在尝试使用 snowFall 来使用集群加速我的代码。我的代码的简化版本是
library(snowfall)
pbsnodefile = Sys.getenv("PBS_NODEFILE")
machines <- scan(pbsnodefile, what="")
machines
nmach = length(machines)
nmach
sfInit(parallel=TRUE,type='SOCK',cpus=nmach,socketHosts=machines)
examp <- function(W,Y)
guess=lm(Y~W)
return(guess$coef)
makedat <- function(N)
###Generating a dataset.
#Covariate vector
W <- mvrnorm(N,mu = rep(0,2),Sigma = matrix(c(1,0.8,0.8,1),nrow = 2))
Y <- rnorm(N)
result <- data.frame(W = W,Y= Y)
return(result)
sfExport("examp")
sfExport("makedat")
sfLibrary(MASS)
wrapper <- function(sim)
data <- makedat(100)
result <- examp(W = cbind(data[,1],data[,2]),Y = data[,3])
return(result)
nSim <- 2
result = sfLapply(1:nSim,wrapper)
save(result)
sfStop()
这样做的目的是只输出 lm 对象的系数(guess$coef),但我得到的输出是整个 lm 对象。所以在我看来,$ 不起作用。稍后在我的代码中(不包括在这里我遇到了同样的问题,即 $ 似乎没有工作)。非常感谢所有建议。
【问题讨论】:
请考虑检查答案旁边的绿色复选标记,以表明您的问题已得到解答。欢迎来到 SO。 【参考方案1】:如果您只是想从模型中取出系数,您可以使用:
coef(guess)[2]
这将检索第二个系数,即斜率。
对 OP 的后续评论(我是新来的,所以不确定我是否真的在此处将新信息添加到一个单独但相关的问题中,所以请告诉我我是否做错了!):
我发现先把某物变成一个对象来理解它的结构更容易。按照 ?nlm() 中的示例:
f <- function(x) sum((x-1:length(x))^2)
nlm(f, c(10,10))
nlm(f, c(10,10), print.level = 2)
utils::str(nlm(f, c(5), hessian = TRUE))
f <- function(x, a) sum((x-a)^2)
nlm(f, c(10,10), a = c(3,5))
f <- function(x, a)
res <- sum((x-a)^2)
attr(res, "gradient") <- 2*(x-a)
res
nlm(f, c(10,10), a = c(3,5))
###HOW TO ACCESS THE ESTIMATE###
#making the nlm() output an object:
nlm.obj<- nlm(f, c(10,10), a = c(3,5))
#checking the structure
str(nlm.obj) #a list
nlm.obj[[2]] #accessing estimate
nlm.obj[[2]][1] #accessing the first value within the estimate
请任何人评论此答案的质量,以便我将来以更好的方式提供帮助。
【讨论】:
谢谢!这种方法适用于 lm 对象。稍后(未包含在我发布的代码中)我想使用 nlm(...)$estimate 并且仍然只是给了我整个列表。 str 方法似乎对我有用。谢谢,这很有帮助。以上是关于$ 使用 snowFall 的问题的主要内容,如果未能解决你的问题,请参考以下文章
什么时候需要使用 sfExport(R Snowfall 包)
为集群上的所有节点开启所有 CPU:snow/snowfall 包