2015-02-17 5 views
0

Я пытаюсь переписать цикл как оператор с привязкой, но я зацикливаюсь, потому что не могу понять, как включить индекс в функцию. Недавно я спросил 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, которые я не идентифицировал. Заранее спасибо.

+4

Я не смотрел больше в эту проблему. Но вы можете получить ожидаемый результат 'indx <- which (grepl ('_ {5}', text)); text [indx + 2] <- paste0 ('B:', text [indx + 2]) ' – akrun

+0

Ahhhh ... это имеет смысл! Я, конечно, мог это сделать. Мне все еще интересно, как включить индекс в 'lapply' для обучения. –

+1

Если вы хотите сделать то же самое в 'sapply', используя' indx', возможно, 'text [indx + 2] <- sapply (indx, function (x) paste0 ('B:', text [x + 2])) '(что вроде ненужно) – akrun

ответ

0

Чтобы включить индекс в lapply, сделать это:

lapply(1:length(text), function(i) doStuff(text[i])) 
Смежные вопросы