Я создаю набор данных для вычисления совокупных значений для разных комбинаций слов с использованием регулярного выражения. Каждая строка имеет уникальное значение регулярного выражения, которое я хочу проверить на другом наборе данных и найти количество раз, когда оно появилось в нем.Заменить функцию apply с помощью lapply
Первый набор данных (df1) выглядит следующим образом:
word1 word2 pattern
air 10 (^|\\s)air(\\s.*)?\\s10($|\\s)
airport 20 (^|\\s)airport(\\s.*)?\\s20($|\\s)
car 30 (^|\\s)car(\\s.*)?\\s30($|\\s)
Другой набор данных (df2), из которого я хочу, чтобы соответствовать это выглядит как
sl_no query
1 air 10
2 airport 20
3 airport 20
3 airport 20
3 car 30
Конечный результат я хочу должен выглядеть как word1 word2 total_occ воздуха 10 1 аэропорт 20 3 автомобиль 30 1
Я могу сделать это с помощью применять в R
process <-
function(x)
{
length(grep(x[["pattern"]], df2$query))
}
df1$total_occ=apply(df1,1,process)
но найти это время принимать, так как мой набор данных довольно большой.
Я узнал, что функция «mclapply» из «параллельного» пакета может использоваться для запуска таких вещей на многоядерных устройствах, для которых я сначала пытаюсь запустить приложение. Его дает мне ошибку говоря
lapply(df,process)
Error in x[, "pattern"] : incorrect number of dimensions
Пожалуйста, дайте мне знать, какие изменения я должен сделать, чтобы запустить lapply правильно.
Вы итерацию моделей, так что должно быть вашим первым аргументом для 'lapply ', правильно? – Frank
Вот почему вы получаете эту ошибку: 'lapply' будет применять некоторую функцию к каждому элементу списка по очереди; поэтому функция должна иметь возможность работать с элементами списка. Элементами в этом контексте фрейма данных являются его столбцы, поэтому вы просите R применить 'process' к каждому столбцу' df'. – tegancp