我最近开始尝试将 R 作为一种用于基因编程的语言。我一直在缓慢但肯定地越来越多地了解 R 的工作原理及其最佳编码实践。然而,我遇到了障碍。这是我的情况。我有一个大约 700 行的数据集,每行有 400 列左右。我已经将所有参数设置为与列数相同的函数作为参数发送到评估(健身评分)函数中。我想在数据集中逐行进行,并将一行中每一列中的值传递给正在评估的函数。第一个问题是弄清楚如何将参数分别传递给函数。“单独”是指该函数需要 400 个参数,而不是长度为 400 的向量。为此,我使用了以下内容:
do.call(function,as.list(parameters))
其中 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) 作为数据集的行。这花了同样长的时间。有关解决方案的任何想法都会有所帮助。