Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 矢量计算特定列的乘积_R_Vectorization - Fatal编程技术网

R 矢量计算特定列的乘积

R 矢量计算特定列的乘积,r,vectorization,R,Vectorization,我有一个矩阵,有两种类型的列名:以“min”结尾的列名和以“max”结尾的列名。 例如,该矩阵的第一行和前6列可以是: M = matrix(c(0.2, 0.3, 0.5, 0.9, 0.7, 0.6), nrow = 1, ncol = 6) colnames(M) = c("a_min", "b_min", "c_min", "a_max", "b_max", "c_max") 我想,对于每一行M,计算所有对列的a_max和a_min,b_max和b_min之差的乘积,依此类推 在上述示

我有一个矩阵,有两种类型的列名:以“min”结尾的列名和以“max”结尾的列名。 例如,该矩阵的第一行和前6列可以是:

M = matrix(c(0.2, 0.3, 0.5, 0.9, 0.7, 0.6), nrow = 1, ncol = 6)
colnames(M) = c("a_min", "b_min", "c_min", "a_max", "b_max", "c_max")
我想,对于每一行
M
,计算所有对列的
a_max
a_min
b_max
b_min
之差的乘积,依此类推

在上述示例中,最终产品为:

(0.9-0.2)*(0.7-0.3)*(0.6-0.5) = 0.028.

如何对常规
2N
列和
p
行进行矢量化处理?

下面是一个基于R的想法

Reduce(`*`, lapply(split.default(M, sub('_.*', '', colnames(M))), diff))
#[1] 0.028

如果你有多行,也就是说,
M这里有一个通过R基的想法

Reduce(`*`, lapply(split.default(M, sub('_.*', '', colnames(M))), diff))
#[1] 0.028

如果您有多行,即
M要计算
max-min
差异,只需减去矩阵,例如

D <- M[, grep('_max', colnames(M))] - M[, grep('_min', colnames(M))]

要计算
max-min
差异,只需减去矩阵,例如

D <- M[, grep('_max', colnames(M))] - M[, grep('_min', colnames(M))]

如果你有多行,计算会如何进行?对于每行,我会有一个数字作为结果如果你有多行,计算会如何进行?对于每行,我会有一个数字作为结果有一行!可能不会想到这个可怕的一行!可能不会想到这一点