• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

与转置数据处理中的R

r 来源:qed 7次浏览

我有这样一些功能:与转置数据处理中的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 
} 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)