我现在正在使用蛮力..
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++)
答案 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
函数。