Проблемы с $ при использовании snowFall
Я пытаюсь использовать 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 (думаю, $coef), но я получаю вывод всего объекта lm. Так что мне кажется, что $ не работает. Позже в моем коде (не включен здесь, я испытываю ту же проблему, то есть $, похоже, не работает). Все предложения очень ценятся.
1 ответ
Если вы просто пытаетесь получить коэффициент из модели, вы можете использовать:
coef(guess)[2]
который извлек бы 2-й коэффициент, наклон.
Последующий комментарий (я новичок здесь, поэтому не был уверен, добавлю ли я новую информацию к отдельному, но как бы связанному с этим вопросу, поэтому скажите мне, если я сделал это неправильно!) В ОП:
Мне легче сначала сделать что-то объектом, чтобы понять его структуру. Следуя примеру, найденному в? 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
Пожалуйста, прокомментируйте качество этого ответа, чтобы я мог помочь вам в будущем.