【发布时间】:2013-05-21 16:59:11
【问题描述】:
在我的程序中,我递归地遍历一个嵌套列表并将元素添加到我将返回的整个列表中。有一些细节需要注意,所以我不能只使用unlist。
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)更改为result <- parseVariables(currentVar, myList)并将list <- c(list, currentVar)更改为list <- c(result, currentVar)。并且你还应该为函数结果添加最后一行,这在上面的表格中不是很清楚。 -
我试过了,它说
object 'result' not found。如果我将parseVariables的内部调用保存到结果中,list <- c(result, currentVar)将如何使用它。它们位于 if-else 语句的不同分支中。 -
@Matthew,几乎任何公式都可以。这个想法是,该函数将公式中的所有非纯符号元素添加到列表中。例如,如果
formula = y ~ x + z则列表应包含 3 个新元素 -y, x, z。省略的各种字符是标准符号,例如'+', '-', ':' -
其他评论者(和我自己)在这里苦苦挣扎的是,这个问题让我们感觉像是在向我们展示一些更大的任务,并且很难诊断问题并提出建议解决方案,除非我们有一个完整的、可重复的示例,我们可以自己运行。