2014-03-19 30 views
1

我已經寫了一篇編碼的sapply和三求和

sum(l(from 1 to n)) 
     sum(i(from 1 to m)) 
      sum(t(from 1 to m) 
       (phil(i)*phil(t)*[I(X(l)<min(y(i),y(t))-z(i)z(t)] 

像這樣表達的:

set.seed(1234567)  
z1<-runif(50,min=0,max=1);m=length(z1)  
z2<-z1;m=length(z1) 
x<-rnorm(60);n=length(x) 
y<-rnorm(50)*0.25 
phil_z1_1<-sqrt(12*(z1/z1)) 
# using the sapply such that 
sum(sapply(1:n, function(l) {sum(sapply(1:m, function(i){sum(sapply(1:m,function(t){phil_z1_1[i]*phil_z1_1[t]*(x[l]<=min(y(i),y(t))-z[i]*z[t])}))})) 

不幸的是這沒有工作,因爲我無法運行它後得到任何結果

我有類似的東西,

sum1<-sum(sapply(1:m, function(t){sum(sapply(1:m, function(i){sum(sapply(1:n,function(l){phil_z1_1[i]*phil_z1_1[t]*(x[l]<=min(y(i),y(t))-z[i]*z[t])}))})) 
+ 

我不明白什麼是符號「+」表示

誰能幫我這個

在此先感謝!

+4

你的總和公式中'j'代表什麼? 「+」表示右括號丟失。實際上,2個缺少「})」。 –

+0

'y'也不見了。 – zx8754

+1

在這樣的情況下,從小開始是個好主意。寫一些測試代碼,比如'sum(sapply(1:4,function(j)sum(sapply(1:3,function(k)k^2))))'來驗證你的語法是否正確。 –

回答

3

如果我理解正確的公式,你要首先確定哪些indizes l,i,t表達min(y[i],y[t])-z[i]*z[t]大於或等於x[l],再總結 phil_z1_1[i]*phil_z1_1[t]對這些indizes。奇怪的是,在後面的表達中沒有l

這是一種方式,但它可能不是最有效的一個:

set.seed(1234567)  
z1 <- runif(50,min=0,max=1) 
z2 <- runif(50,min=0,max=1) 
m <- length(z1)  
x <- rnorm(60) 
n <- length(x) 
y <- rnorm(50)*0.25 
phil_z1_1 <- sqrt(12*(z1/z2)) 

args <- expand.grid(l=1:n, i=1:m, t=1:m) 
args <- subset(args, x[l] <= pmin(y[i],y[t])-z1[i]*z2[t]) 
args <- transform(args, result=phil_z1_1[i]*phil_z1_1[t]) 

sum(args[,"result"]) 
[1] 1173920 

注意,我改名一些變量,所以這可能不是你想要的。

+0

+1!優秀 !我猜'phil_z1_1 < - sqrt(12 *(z1/z2))'不是'z1/z1'? – agstudy

+0

非常感謝,這是非常有幫助的,我有一些前面的表達式的拼寫錯誤,實際上,表達式應該是sum(l(從1到n))sum(i(從1到m))sum(t從1到m(phil(i)* phil(t)* [I(x(l) user3415575