Недавно я начал экспериментировать с 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) в качестве строк набора данных. Это заняло не меньше времени. Любые идеи по решениям будут полезны.
Вы считали использование функции 'ddply' из пакета' plyr'? –
Вы можете использовать 'Rprof', чтобы определить, какие части вашего кода являются самыми медленными. –
Я взглянул на plyr. Как это будет реализовано? У меня есть список векторов, каждый вектор - строка, содержащая параметры. Мне нужно отправить каждую строку в функцию вместе с переменной месяца. –