计算几何级数

时间:2015-01-22 12:15:00

标签: r

我现在正在使用蛮力..

x <- 1.03
Value <- c((1/x)^20,(1/x)^19,(1/x)^18,(1/x)^17,(1/x)^16,(1/x)^15,(1/x)^14,(1/x)^13,(1/x)^12,(1/x)^11,(1/x)^10,(1/x)^9,(1/x)^8,(1/x)^7,(1/x)^6,(1/x)^5,(1/x)^4,(1/x)^3,(1/x)^2,(1/x),1,x,x^2,x^3,x^4,x^5,x^6,x^7,x^8,x^9,x^10,x^11,x^12,x^13,x^14,x^15,x^16,x^17,x^18,x^19,x^20)
Value

但我想使用增量循环,就像java中的for循环

一样
for(integer I = 1; I<=20; I++)

2 个答案:

答案 0 :(得分:9)

^是R中的矢量化函数。这意味着您只需使用x^(-20:20)

编辑,因为这会引起如此多的赞成:

更准确地说,base参数和exponent参数都是矢量化的。

你可以这样做:

x <- 1:3
x^2
#[1] 1 4 9

和此:

2^x
#[1] 2 4 8

甚至这个:

x^x
#[1]  1  4 27 

在前两个示例中,length-one参数被循环使用以匹配较长参数的长度。这就是为什么以下结果会发出警告:

y <- 1:2
x^y
#[1] 1 4 3
#Warning message:
#  In x^y : longer object length is not a multiple of shorter object length

如果你尝试这样的话,你可能想要outer可以给你的东西:

outer(x, y, "^")
#     [,1] [,2]
#[1,]    1    1
#[2,]    2    4
#[3,]    3    9

答案 1 :(得分:1)

Roland已经解决了这样一个事实:你可以做这个矢量化,所以在你做更多没有矢量化的事情的情况下,我会专注于循环部分。

您展示的Java(和C,C ++等)样式循环实际上只是一个while循环。你想做的事情:

for(I=1, I<=20, I++) { ... }

实际上只是一种不同的写作方式:

I=1 # or better I <- 1
while( I <= 20 ) {
  ...
  I <- I + 1
}

所以你已经有了做这种循环的工具。但是,如果要将结果分配给向量,矩阵,数组,列表等,并且每次迭代都是独立的(不依赖于先前的计算)那么通常使用{{更容易,更清晰,总体上更好“ 1}}或lapply函数。