与转置数据处理中的R

我有这样一些功能:与转置数据处理中的R

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)。 由于 这些矩阵通常很大,所以这是非常无效和非常耗时的。

有没有一个聪明的方法来处理这个问题?这将是非常烦人的 必须手动更改代码。

回答:

嗯,首先,如果你的doX功能预计矩阵的转置,你会在某个地方打电话t,例如

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

那么你的选择是:

  1. 转置x一次在顶部
  2. 转置在每个doX调用
  3. 重写doX函数,以便它们采用可选的isTranspose参数。

选项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

}

以上是 与转置数据处理中的R 的全部内容, 来源链接: utcz.com/qa/260541.html

回到顶部