В моей программе я рекурсивно перебираю вложенный список и добавляю элементы в общий список, который я верну. Есть несколько деталей, о которых нужно позаботиться, поэтому я не могу просто использовать unlist
.Рекурсивно редактирование списка в R
formulaPart
принято считать formula object.
Мой код:
parseVariables <- function(formulaPart, myList){
for(currentVar in as.list(formulaPart))
if(typeof(currentVar == 'language'
parseVariables(currentVar, myList)
else
if(! toString(currentVar) %in% c(\\various characters)
list <- c(list, currentVar)
}
Я проверил, что функция корректно добавляет элементы в список, когда он должен. Проблема в том, что список теряет элементы из-за рекурсии. Элементы, добавленные во время одного внутреннего рекурсивного вызова, не сохраняются для другого рекурсивного вызова.
Если бы это было на C++, я мог бы просто использовать указатель; то же самое для Java. Однако я не понимаю, как обрабатывать эту ошибку в R.
Не могли бы вы предоставить некоторые примеры данных для работы? –
Ну, вы не сохраняете результат от внутреннего вызова 'parseVariables'. Попробуйте изменить 'parseVariables (currentVar, myList)' to 'result <- parseVariables (currentVar, myList)' и 'list <- c (list, currentVar)' to 'list <- c (result, currentVar)'. И вы также должны добавить окончательную строку для результата функции, что не совсем ясно в приведенной выше форме. –
Я пробовал это, и он говорит, что результат «объекта» «не найден». Если я сохраню внутренний вызов 'parseVariables', чтобы получить результат, как будет выглядеть' list <- c (result, currentVar) '. Они находятся в разных ветвях выражения if-else. –