gpt4 book ai didi

r - 列的乘积,按行,动态列输入 - 矢量化操作

转载 作者:行者123 更新时间:2023-12-02 02:45:12 25 4
gpt4 key购买 nike

我想对以下代码进行矢量化处理,以提高处理效率。我需要逐行获取列的乘积(即 rowProds),但我希望乘积的列数需要是另一个输入的函数。

如果可能的话,我更希望使用 Base R 完成此操作,但我乐于接受并感谢任何建议。

这可以使用循环或使用 udf 应用系列轻松完成,但这些速度不足以满足我的需求。

# Generate some data

mat <- data.frame(X = 1:5)
for (i in 1:5) {
set.seed(i)
mat[1 + i] <- runif(5)
}

# Via a for loop

for (i in 1:nrow(mat)) {
mat$calc[i] <- prod(mat[match(mat$X[i], mat$X), 2:(i + 1)])
}
mat

# Via a function with mapply

rowprodfun <- function(X) {
myprod <- prod(mat[match(X, mat$X), 2:(X + 1)])
return(myprod)
}

mat$calc <- mapply(rowprodfun, mat$X)
mat

mat$calc
# [1] 0.265508663 0.261370165 0.126427355 0.013874517 0.009758232

上述两种方法都会产生相同的“calc”列。我只需要一种更有效的方法来生成此列。

最佳答案

一种选择是将上三角元素转换为 NA,然后使用 matrixStats 中的 rowProds

library(matrixStats)
rowProds(as.matrix(mat[-1] * NA^upper.tri(mat[-1])), na.rm = TRUE)
#[1] 0.265508663 0.261370165 0.126427355 0.013874517 0.009758232

关于r - 列的乘积,按行,动态列输入 - 矢量化操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55640244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com