2015-11-08 113 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循环被认为是不可取的,因为它们倾向于采取“矢量”思维的方式,这是一种为提高性能而付出额外努力的策略。

相关问题