2016-09-30 42 views
1

我創建了一個函數,我想要計算(幾個)數據向量。
實際上,對於一個變量,其他參數應該在一個範圍內(1:100),而其他參數則依次保持不變。將函數中使用的值限制爲它們的總和

功能是:EI <- function(x,y,z) {(x+y)/(2*(2*x+y)+z)}

我的問題是,X + Y + Z的總和必須被限制爲100。而且我不知道如何告訴它的功能。例如,如果x = 20,y只能取自0:80的值,即(100-20),並且z可以取自0:100-(x + y)的取值。

我使用下面的代碼,其中z不被視爲全部。我想,我會得到至少一個大的載體,但我得到的是單號:

for(x in 1:100) { 
     for(y in 0:(100-x)) { 
       for(z in 0:(100-(x+y))) { 
       v1 <- c(EI(x,y,z))   
     } 
} 
} 

我需要告訴函數EI()是x + y + z之有alwys是100. 有沒有人知道如何解決這個問題?

+0

會拋出一個錯誤? 'if(x + y + z!= 100)stop(「sum xyz must be 100」)'? – zx8754

回答

0

如果你想創建你需要做的是一個向量:

v1 <- c() 

for(x in 1:100) { 
     for(y in 0:(100-x)) { 
       for(z in 0:(100-(x+y))) { 
       v1 <- c(v1, EI(x,y,z))   
     } 
    } 
} 

不幸的是這將是緩慢的(因爲在每一步你重新分配一個新的載體),更好的選擇是首先分配

v1 <- numeric(171700) 
k <- 0 
for(x in 1:100) { 
     for(y in 0:(100-x)) { 
       for(z in 0:(100-(x+y))) { 
       k <- k + 1 
       v1[k] <- EI(x,y,z)   
     } 
    } 
} 

你也可以寫同樣的事情sapply功能,這是稍快:

與適當大小的矢量如果sum不是100,那麼'EI`函數中的
相關問題