請問closure

1,751 views
Skip to first unread message

羅仁鴻

unread,
Jun 7, 2013, 7:25:39 AM6/7/13
to taiwa...@googlegroups.com
rm(list=ls())


y.signal=c(3,7,14,24,32,12)
y.noise=c(12,16,21,15,10,6)
NS=sum(y.signal)
NN=sum(y.noise)

parest.signal=y.signal/NS
parest.noise=y.noise/NN

#negative log likelihood for one stimulus
nll.mult.1=function(p,y) 

-sum(y*log(p))
nll.general=nll.mult.1(parest.signal,y.signal)+
nll.mult.1(parest.noise,y.noise)

print(nll.general)



#negative log likelihood of free-variance signal detection
#for confidence interval paradigm


sd.prob.1=function(mean,sd,bounds)
{
cumulative=c(0,pnorm(bounds,mean,sd),1)
p.ij=diff(cumulative)
return(p.ij)
}

nll.sigdet=function(par,y)

par=c(5 , 1  ,-2,-1,0,1,2)
y=c(3,7,14,24,32,12,    12,16,21,15,10,6)
{
I=length(y)/2
d=par[1]
sigma=par[2]
bounds=par[3:length(par)]
p.noise=sd.prob.1(0,1,bounds)
p.signal=sd.prob.1(d,sigma,bounds)
nll.signal=nll.mult.1(p.signal,y[1:I])
nll.noise=nll.mult.1(p.noise,y[(I+1):(2*I)])
return(-nll.signal-nll.noise)
}

這是我打的語法,我一直不曉得為什麼他跑出"錯誤在par[1] : 'closure' 類型的物件無法具有子集合",我覺得我函數都有定義到了

WEPA ^_^

unread,
Jun 7, 2013, 11:48:22 AM6/7/13
to taiwa...@googlegroups.com
Hi friend,

參考以下之說明:

1. R 的物件設定建議採用 <- 符號
2. 最後 nll.sigdet 函數中宣告的 par 與 y 調整至 function 之外, 完整部份 R code 如下:

nll.sigdet <- function(par,y) {
  I <- length(y)/2
  d <- par[1]
  sigma <- par[2]
  bounds <- par[3:length(par)]
  p.noise <- sd.prob.1(0,1,bounds)
  p.signal <- sd.prob.1(d,sigma,bounds)
  nll.signal <- nll.mult.1(p.signal,y[1:I])
  nll.noise <- nll.mult.1(p.noise,y[(I+1):(2*I)])
  return(-nll.signal-nll.noise)
}

par <- c(5,1,-2,-1,0,1,2)
y <- c(3,7,14,24,32,12,12,16,21,15,10,6)
nll.sigdet(par, y)
# end

注意: 
一般輸入參數名稱不一定須與函數中參數名稱相同,參考以下執行結果.


羅仁鴻於 2013年6月7日星期五UTC+8下午7時25分39秒寫道:
Reply all
Reply to author
Forward
0 new messages