我有一个R(featuresList
)中的向量列表,其格式为:
[[2]]
[1] 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0
[93] 1 0 0 1 0 1 1 1 1 0 0 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0
[[3]]
[1] 0.64285714 0.74285714 0.78571429 0.57142857 0.60000000 0.68571429 0.67142857 0.64285714 0.74285714 0.71428571 0.57142857 0.42857143 0.72857143 0.54285714 0.64285714 0.65714286
[17] 0.57142857 0.70000000 0.47142857 0.64285714 0.47142857 0.70000000 0.57142857 0.62857143 0.57142857 0.78571429 0.61428571 0.57142857 0.50000000 0.57142857 0.74285714 0.62857143
我已经写了这个for
来将一个列表的每个元素与其他列表中的相应元素相加。在上面的示例中,列表[[2]]
有两个列表,我想将此列表的每个元素与列表[[3]]
中的元素相加。因此,我会将[[2]][1]
中的1与[[3]][1]
中的数字相加,即0.64285714
,结果为1.64285714
。
起初我以为我想出了这个循环:
features <- 0
for(i in seq_along(featuresList)){
if(!(is.null(featuresList[[i]])))
features<-features+ unlist(featuresList[[i]])
}
并且工作正常:
[1] 1.6428571 0.7428571 0.7857143 1.5714286 1.6000000 0.6857143 1.6714286 1.6428571 1.7428571 0.7142857 1.5714286 1.4285714 0.7285714 1.5428571 0.6428571 1.6571429 1.5714286 0.7000000
[19] 1.4714286 1.6428571 1.4714286 0.7000000 1.5714286 1.6285714 1.5714286 0.7857143 1.6142857 1.5714286 1.5000000 1.5714286 0.7428571 1.6285714 1.6142857 0.7857143 1.5285714 1.5714286
它将第一个向量列表的每个元素与第二个向量列表的对应元素相加。但是我已经尝试了几天使用* apply重写这段代码而没有运气。
有人能暗示如何做吗?
答案 0 :(得分:3)
如果我理解你的问题,你可以在列表中添加向量 - 而不使用*apply
函数:
featuresList[[2]] + featuresList[[3]]
#[1] 1.6428571 0.7428571 0.7857143 1.5714286 1.6000000 0.6857143 1.6714286 1.6428571 1.7428571 0.7142857 1.5714286 1.4285714 0.7285714
如果我们想在列表中添加所有向量,我们可以使用Reduce()
,如@akrun所建议的那样:
Reduce("+", featuresList)
#[1] 2.642857 1.742857 1.785714 2.571429 2.600000 1.685714 2.671429 2.642857 2.742857 1.714286 2.571429 2.428571 1.728571
这将返回列表中存储的所有向量的总和(请注意,在这种情况下,featuresList[[1]]
是仅包含1
的(已回收)向量。
我使用了您的数据子集:
featuresList <- list(1, c(1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0), c(0.64285714,
0.74285714, 0.78571429, 0.57142857, 0.6, 0.68571429, 0.67142857,
0.64285714, 0.74285714, 0.71428571, 0.57142857, 0.42857143, 0.72857143))