Есть две вещи, которые необходимо сделать, чтобы эта работа:
1) предположительно, рекурсия не включается go навсегда, т.е. в какой-то момент объект не будет содержать ссылку на другой объект, потому что он находится в нижней части дерева. Таким образом, вам нужна возможность того, что список другого дерева ob js равен NULL. Вы делаете это с объединением классов:
setClassUnion("listOfOtherTreeObjsOrNULL",c("listOfOtherTreeObjs","NULL"))
, а затем правильный класс для использования в третьем слоте вашего объекта - это новый союз классов.
2), когда вы определяете метод для transform
должен выглядеть примерно так:
function(object,i,j){
## do whatever you want with i and j
if(is.null(object@listOfOtherTreeObjs)) return(object)
else{
object@listOfOTherTreeObjs <- lapply(object@listOfOtherTreeObjs,propagate)
return(object)
}
}
Причина, по которой ваши изменения, похоже, не дали никакого эффекта, заключается в том, что вы ничего не return
извлекали из своей функции, поэтому вы меняли только копии ваших объектов, которые нигде не сохранялись.