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

我以为我熟悉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”的每个调用。

我认为我需要在apply和多元mapply之间进行某种混合。是否有意义 ?

一种实现目标的“肮脏”方法是按行(或列)拆分矩阵,在结果列表上使用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 - R-对矩阵的每一行/列应用具有不同参数值的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26805168/

10-11 06:27