【问题标题】:Sequential subtraction within a vector - in R, without using LOOP向量内的顺序减法 - 在 R 中,不使用 LOOP
【发布时间】:2018-07-11 22:05:26
【问题描述】:

考虑一个长度为 n 的列表

a <- list(c(5, 41, 75, 158, 269, 432, 630, 901, 1534))

我正在尝试在此列表中进行顺序减法。我的目标是执行顺序减法 1,使每个元素比前一个元素小 1,因为列表被拉长。

因此,我希望列表中的数字如下:

a <- list(c(5, 41-1, 75-2, 158-3, 269-4, 432-5, 630-6, 901-7, 1534-8))

我的“伪代码”如下(在现实生活中我无法做到)

a[[1]][n] <- (a[[1]][n]-(n-1))

但这又在真正的 R 中不起作用。

这样做有什么建议吗?

谢谢!

【问题讨论】:

    标签: r subtraction sequential


    【解决方案1】:

    因为它是 1 个向量的 list,所以用 [[ 提取 vector 并从 'a' 的序列中减去(从 1 中减去)

    a[[1]] <- a[[1]] - (seq_along(a[[1]]) - 1)   
    a
    #[[1]]
    # [1]    5   40   73  155  265  427  624  894 1526
    

    如果是list 和多个vector,请使用lapply

    lapply(a, function(x) x - (seq_along(x) - 1))
    

    或者relist

    relist(unlist(a) - (sequence(lengths(a))-1), skeleton = a)
    

    【讨论】:

      【解决方案2】:
      lapply(a,function(x,y)x-y,y=seq(from=0,length.out = length(a)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 2020-11-05
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        相关资源
        最近更新 更多