我最近开始尝试将R用作遗传编程语言。我已经慢慢地学习了越来越多的关于R如何工作和最佳编码实践的知识。 但是,我碰到了一个路障。这是我的情况。我有一个大约700行的数据集,每行有400左右的列。我已经设置了一个函数,其中有许多与列数相同的参数被作为参数发送到评估(健身评分)函数中。我想在数据集中逐行进行,并将行中每列的值传递给正在评估的函数。第一个问题是弄清楚如何将参数分别传递给函数。所谓“分开”的意思是该函数需要400个参数,而不是一个长度400的矢量为此,我使用了下列:R中的函数,向量和循环
do.call(function,as.list(parameters))
当参数是一个月变量(1-12)的载体,其被附加到数据集中一行中的值。这工作正常,我只是使用for循环遍历数据集中的700行,然后在12个月内循环另一个循环,并使用上面的代码累积输出向量。问题是这是痛苦的缓慢,每个功能大约24-28秒。我有100-500个功能发送到每一代演进的评估中。底线是这不是要走的路。接下来我尝试使用下面的sapply方法。
outputs <- sapply(1:12,function(m) sapply(rows[1:length(rows)],function(p) do.call(f,as.list(c(p,m)))))
这应用(1-12)作为月份,然后应用(1-700)作为数据集的行。这花了很长时间。任何解决方案的想法都会有所帮助。
您是否考虑过使用'plyr'软件包中的'ddply'功能? –
您可以使用'Rprof'来确定代码中哪些部分最慢。 –
我看过plyr。它将如何实施?我有一个向量列表,每个向量是一个包含参数的行。我需要将每行发送到函数以及一个月变量。 –