Я пытаюсь переписать цикл как оператор с привязкой, но я зацикливаюсь, потому что не могу понять, как включить индекс в функцию. Недавно я спросил similar question на SO и получил элегантный ответ, но ответ не обобщает эту проблему.Как включить индекс в утверждения R lapply
Я работаю с набором записей, а записи структурированы в длинном формате. Я могу идентифицировать каждый уникальный набор записей с помощью уникальной строки. Строки, которые я хочу исправить, всегда имеют ровно две строки после этих уникальных строк.
Вот воспроизводимые данные:
text <- c("_____", "A: aaa", "bbb", "C: cccc", "D: dddd",
"_____", "A: aaa:aaa", "bbb", "C: ccc", "D: dddd", "E: eeee",
"_____", "A: aaa", "bbb:bbb", "C: ccc", "D: dddd")
А вот цикл, который делает то, что мне нужно это делать. Он отлично работает на очень небольшом наборе данных, но я должен применить эту логику несколькими способами до нескольких сотен тысяч строк данных - необходим более эффективный метод!
for(i in 3:length(text)){
text[i] <- ifelse(grepl("\\_{5}", text[i-2]) == TRUE,
paste("B: ", text[i], sep=""), text[i])
text
}
Конечно, не стесняйтесь перенаправлять, если существуют проблемы на SO, которые я не идентифицировал. Заранее спасибо.
Я не смотрел больше в эту проблему. Но вы можете получить ожидаемый результат 'indx <- which (grepl ('_ {5}', text)); text [indx + 2] <- paste0 ('B:', text [indx + 2]) ' – akrun
Ahhhh ... это имеет смысл! Я, конечно, мог это сделать. Мне все еще интересно, как включить индекс в 'lapply' для обучения. –
Если вы хотите сделать то же самое в 'sapply', используя' indx', возможно, 'text [indx + 2] <- sapply (indx, function (x) paste0 ('B:', text [x + 2])) '(что вроде ненужно) – akrun