我怎样才能加快我的代码(矩阵,sapply,lapply)

时间:2017-06-12 11:24:29

标签: r time simulation lapply sapply

我使用此代码。但这非常耗时。我怎么能加快这一点。可以帮忙吗?

class Zadanie
{
    protected:
        string tresc;
};

class Zadanie4Odp : private Zadanie
{
    private:
    string a,b,c,d;
    string poprawna;
    public:
    Zadanie4Odp(string tresc1,string a1,string b1,string c1,string d1,string pop)
    {
        tresc=tresc1;
        a=a1;
        b=b1;
        c=c1;
        d=d1;
        poprawna=pop;
    }
};

class ZadanieNumer : private Zadanie
{
    private:
        int poprawna;
    public:
    ZadanieNumer()
    {
    }
    ZadanieNumer(string tresc1,int pop)
    {
        tresc=tresc1;
        poprawna=pop;
    }
};

class ZadanieTekst : private Zadanie
{
    private:
        string poprawna;
    public:
        ZadanieTekst(string tresc1,string pop)
        {
             tresc=tresc1;
             poprawna=pop;
        }
};

class Baza
{
//here must be array of objects
};

1 个答案:

答案 0 :(得分:1)

两点:

  • rowMeans(a)部分在sapply(1:ncol(a))内的每次迭代中重新计算,并且也是sapply(1:nrow(a))。 colMeans(a)部分也是如此。对于大型对象,它将花费太长时间并且对于维度n和m具有O(m * n ^ 2)时间(因此执行时间随着方形对象的维度的立方体而增加)。您可以在"公式"的开头计算行和列平均值,而不是在封闭内部填充everthing。函数并将这些值分配给对象。一种更简洁的方法是分别定义最内层函数并对其进行函数调用(由于调用可能会有一些惩罚,但使代码更加优雅和可跟踪)

  • 除了行和列的两个蓝色外,您可以使用外部,这是ply' s的二维版本。但是要使其工作,必须对内部函数进行矢量化。您可以通过y< - Vectorize(x)

  • 定义函数x的矢量化版本