gpt4 book ai didi

R - 为矩阵的每一行/列应用具有不同参数值的函数

转载 作者:行者123 更新时间:2023-12-04 11:02:17 28 4
gpt4 key购买 nike

我试图将函数应用于矩阵的每一行或每一列,但我需要为每一行传递不同的参数值。

我以为我熟悉 lapply、mapply 等......但可能还不够。

作为一个简单的例子:

> a<-matrix(1:100,ncol=10);
> a
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100

假设我想对每一行应用一个函数,我会这样做:
apply(a, 1, myFunction);

但是我的函数需要一个参数,所以:
apply(a, 1, myFunction, myArgument);

但是,如果我希望我的论点为每一行采用不同的值,我就找不到正确的方法来做到这一点。
如果我定义了一个具有多个值的“myArgument”,整个向量显然将被传递给“myFunction”的每次调用。

我认为我需要一种应用和多元映射之间的混合。是否有意义 ?

实现我的目标的一种“肮脏”方法是按行(或列)拆分矩阵,在结果列表上使用 mapply 并将结果合并回矩阵:
do.call(rbind, Map(myFunction, split(a,row(a)), as.list(myArgument)));

我查看了扫描、聚合、所有 *apply 变体,但我找不到满足我需要的完美匹配。我错过了吗?

谢谢您的帮助。

最佳答案

您可以使用 sweep要做到这一点。

a <- matrix(rnorm(100),10)
rmeans <- rowMeans(a)
a_new <- sweep(a,1,rmeans,`-`)
rowMeans(a_new)

关于R - 为矩阵的每一行/列应用具有不同参数值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805168/

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