R中的类Excel计算

R中的类Excel计算,r,R,我得到了向量的两个初值。我想从前面的两个向量计算下一个向量值。就像在excel中一样:用数字填充前两个单元格,在第三个单元格中编写公式,然后将其应用于其他单元格。但是,我不想做循环 我想做的事情: x = c() x[1] = 1 x[2] = 2 for (i in 3:10) x[i] = 2*x[i-1] - 0.5*x[i-2] x > x [1] 1.0000 2.0000 3.5000 6.0000 10.2500 17.5000 29.87

我得到了向量的两个初值。我想从前面的两个向量计算下一个向量值。就像在excel中一样:用数字填充前两个单元格,在第三个单元格中编写公式,然后将其应用于其他单元格。但是,我不想做循环

我想做的事情:

x = c()
x[1] = 1
x[2] = 2
for (i in 3:10)
    x[i] = 2*x[i-1] - 0.5*x[i-2]

x

> x
 [1]   1.0000   2.0000   3.5000   6.0000  10.2500  17.5000  29.8750  51.0000
 [9]  87.0625 148.6250
> 

我想在计算当前值时使用向量的先前值,但不是像我刚才那样。

我写这篇文章是为了回答你的问题,因为我认为你的问题的答案是“可能”是“不”

据我所知,如果不在后台循环,这是不可能的,因为您需要为每个后续步骤重新轮询新值。在Excel中,我知道您所指的自动填充选项,它在后台循环


即使使用“嵌入”函数中的计算延迟,每次更新以前的值时,仍必须再次调用该函数。在我看来,你想做的逻辑基本上是一个循环,除非你想手工写每一行。我不知道有哪种矢量化方法适合您,因为矢量化语句必须同时完成所有工作。

您可以找到序列的第I个元素,而不必像这样循环:

roots <- polyroot( c(0.5, -2, 1) )
roots <- Re(roots)

k <- solve( rbind( 1, roots ), c(1,2) )

genfun <- function(n) {
    as.vector(k %*% roots^(n-1))
}

genfun(1)
genfun(2)
genfun(3)
genfun(4)
如果我们执行以下操作,则更容易与循环进行比较:

genfun2 <- Vectorize(genfun)
genfun2( 1:10 )
然而,虽然不使用显式循环,但循环有几种用途:使用内部循环,然后在内部使用mapply,也使用哪些循环,因此这并不完全符合无循环的要求。即使我们手工输入“genfun1,genfun2,genfun3”。。。然后,即使不强制计算机循环,我们也在使用wetware循环,所以我不知道这是否算数

就我个人而言,循环似乎是更简单的选择。如果预先分配整个向量并编写一个有效的循环,那么循环可能不会比其他方法慢

编辑


实际上,您也可以使用递归函数来执行此操作,并存储所有中间计算。我不确定这是否被认为是没有循环的。无论哪种方式,我都希望它比简单的循环更复杂、更慢。

您希望在后台不使用循环还是不编写循环的情况下执行它?你能给我们举一个你可能使用的值的例子,以及你希望如何计算其余的值吗?你试过什么了吗?你有代码吗?事实上我在和matrix合作。我只是想了解这个想法。在计算当前值时是否可以使用向量的先前值。但不要这样使用循环:fori in 3:10 x[i]=2*x[i-1]+0.5*x[i-2]。请编辑您的问题,提供重新创建精确输入的R代码,然后给出所需输出的清晰示例。