有没有办法压缩这段代码?

时间:2015-06-17 18:59:05

标签: r iteration

有没有办法压缩像这样的代码?在这种情况下,B只是一个列向量,A只是一个标量值。我觉得好像Q1< - A *(1 + B [1])这样的行必须​​保持这样,然后其余的代码可能会以更清洁的方式编写。

Q1 <- A*(1+B[1])

Q2 <- Q1*(1+B[2])

Q3  <- Q2*(1+B[3])

Q4 <- Q3*(1+B[4])

Q5 <- Q4*(1+B[5])

QCombo <- matrix(c(Q1,Q2,Q3,Q4,Q5))

非常感谢任何帮助。期望的结果将是列向量。

2 个答案:

答案 0 :(得分:3)

您可以尝试cumprod(使用@ MrFlick&#39;示例)

A*cumprod(B+1)
#[1]   20   60  240 1200 7200

答案 1 :(得分:2)

假设您的A和B看起来像这样

Private Sub lstExample_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim wb As Workbook
    Dim I As Integer
    Dim ID As String
    Dim findValue As Range

    Set wb = ThisWorkbook
    'Get the values of the selected row in listbox on doubleclick
    For I = 0 To lstExample.ListCount - 1
        If lstExample.Selected(I) = True Then
    'Set listbox column 1 as ID value to find
            ID = lstExample.List(I, 1)
        End If
    Next I

    'Match ID (column A) on Sheet1
    Set findValue = wb.Sheets(1).Range("A:A").Find(What:=ID, LookIn:=xlValues)
    MsgBox findValue
End Sub

这看起来很好用A <- 10 B <- 1:5 函数

Reduce

我们使用Reduce(function(a,b) a*(1+b), B, init=A, accumulate=T)[-1] # [1] 20 60 240 1200 7200 修剪初始[-1]值。如果你真的需要,可以将它们包裹在A电话中。