2015-11-08 114 views
0

我有一個R問題。我想使矢量函數遵循一個模式,在這種情況下,如何創建一個像v=(1/(x+1) , 1/(x+2), 1/(x+3),....,1/(x+n))這樣的矢量並獨立使用每個函數,例如,第一個函數的值是矢量v的第一個分量,在3中求值。在R中有一個模式的函數向量

這將顯示1 /(3 + 1)=四分之一

通知矢量分量:1 /(X + i)中,I = 1,...,N

如何創建一個「for」循環v =(f1,f2,... fn),fn = 1 /(x + i) 然後就可以調用其中一個函數了?

有什麼建議嗎?

回答

2

創建一個列表以存儲功能:

> v=list() 

創建一個函數發生器(你必須在這裏使用的力):

> makef=function(i){force(i);function(x){1/(x+i)}} 

填充列表:

> for(i in 1:6){v[[i]]=makef(i)} 

這樣稱呼:

> v[[1]](1) 
[1] 0.5  # 1/(1+1) 
> v[[2]](1) 
[1] 0.3333333 # 1/(2+1) 
+1

或'lapply(1:6,makef)'[我知道OP要求循環]。我喜歡「你必須使用[F] orce」... –

+0

謝謝Spacedman – albert

0

在R中,您可以將序列添加到常量並獲得緊湊的代碼。

cont_fract <- function(x, length) { 1/(x+1:length) } 

cont_fract(3, 10) 
#----------- 
[1] 0.25000 0.20000 0.16667 0.14286 0.12500 0.11111 0.10000 
[8] 0.09091 0.08333 0.07692 

Josh的評論將在這裏適用:如果只是做這個交互可以使用1/(3+1:10)。在R中,For循環被認爲是不可取的,因爲它們傾向於採取「矢量」思維的方式,這是一種爲提高性能而付出額外努力的策略。

相關問題