如何循环r中的除法函数

时间:2017-10-20 14:11:25

标签: r

假设我有一个列表:(我的函数比这个例子更复杂,有许多向量因数据而异)。我的功能的想法是将第一个向量的每个元素除以所有向量的所有元素的总和。也就是说,我正在寻找这样的东西:

mylist[[1]]+mylist[[2]]+....+mylist[[100]]

x <- c(1,2,3,4)
y <- c(3,4,5,6)
z <- list(x,y)

然后我想将列表的第一个元素的每个元素除以列表的第一个元素和第二个元素的第一个元素的总和,这样:

z[[1]] / (z[[1]] + z[[2]])

输出结果为:

[1] 0.2500000 0.3333333 0.3750000 0.4000000

我想让它自动进行分割。那是因为列表中我的矢量数量有所不同。所以,我使用了lapply

f <- lapply(z, function(x) (x/sum(x)))

输出结果为:

  > f
    [[1]]
    [1] 0.1 0.2 0.3 0.4

    [[2]]
    [1] 0.1666667 0.2222222 0.2777778 0.3333333

输出错误。我知道,因为我的f函数没有以正确的方式完成工作。那么,我该如何解决呢?有什么帮助吗?

我还尝试了for循环:

for (i in 1:2){
  z[[i]] / (sum(z[[i]]))
}

这也没有解决我的问题。所以在总和中我想总结列表的所有元素。

1 个答案:

答案 0 :(得分:0)

经过一段艰难的时间解决这个问题。我发现这是最简单的方法。

t <- list()
for (i in 1:2){

 t[[i]] <- z[[i]] / Reduce("+", z)
}

随着lapply成为:

lapply(1:2, function(i) z[[i]] / Reduce("+", z))