处理R中的转置数据

时间:2013-10-17 14:17:57

标签: r data-manipulation

我有一些这样的功能:

myf = function(x) {
    # many similar statements involving indexing x
    do1(x[, indexfunc1()])
    do2(x[, indexfunc1()])
    do3(x[, indexfunc1()])
    do4(x[, indexfunc1()])
    do5(x[, indexfunc1()]) 
}

在所有这些功能中,我需要提取列或行 x,这些函数用于某些循环。 问题是有时我们也有转置数据 格式,所以这意味着对于这些数据我们必须得到t(x)。 这是非常低效和非常耗时的 这些矩阵往往很大。

有没有一种聪明的方法可以解决这个问题?这会非常烦人 必须手动更改代码。

1 个答案:

答案 0 :(得分:1)

首先,如果您的doX函数期望矩阵的转置,那么您将在某处调用t,例如

do1(t(x[indexfunc(),])))

所以你的选择是:

  1. 在顶部转换x一次
  2. 每次doX来电转接
  3. 重写您的doX函数,以便他们采用可选的isTranspose参数。
  4. 选项3将是最多的工作,但也是最有效的。使用选项2有意义的情况是x是巨大的,但每次只选择少量的行/列。在这种情况下,您可以执行以下操作:

    matrixSelect<-function(x,subset,dim=1){
      if(dim==1)
          t(x[subset,])
      else
          x[,subset]
    }
    

    然后写

    myf = function(x,dim=2) {
        # many similar statements involving indexing x
        do1(matrixSelect(x,indexfunc1(),dim)
        # etc
    }