我已经创建了一个函数,用于生成一个图(贝叶斯网络)和两组边列表。我希望将图和两个边列表放入一个最终列表中,以便返回(因此返回的总是包含三个对象的列表)。我已经阅读了无数关于列表追加函数的Stack页面,但仍然会遇到某种错误,提示“x必须是’bn’类的对象”。也许我没有正确地将图和列表添加到我的最终列表中?我希望你们能帮我解决这个问题。以下是我的代码。
另外,如果我想清空一个包含某些对象的列表,使用exampleList <- NULL
可以达到效果吗?
startOfMethod(G_0, dataX) { n = 0 graphQueue = G_0 FINAL_LOCKED_NODES_ARRAY_REVERSED = list() FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES = list() graph_lock_andEdges_Array = list() While(n < 1000) { ... 构建图G_1的代码 if(score(G_1,dataX,type="aic") <= score(graphQueue,dataX, type ="aic")){ graphQueue = G_1 FINAL_LOCKED_NODES_ARRAY_REVERSED = temp_Lock_Nodes_Array_Reversed FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES = temp_Lock_Nodes_Array_NonReversed_Candidates print("FINAL_LOCKED_NODES_ARRAY_REVERSED") print(FINAL_LOCKED_NODES_ARRAY_REVERSED) print("Break 4") } n = n + 1 } graph_lock_andEdges_Array = c(graph_lock_andEdges_Array, list(graphQueue)) graph_lock_andEdges_Array = c(graph_lock_andEdges_Array, list(FINAL_LOCKED_NODES_ARRAY_REVERSED)) graph_lock_andEdges_Array = c(graph_lock_andEdges_Array, list(FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES)) return(graph_lock_andEdges_Array) }
回答:
如果返回的列表应该包含三个对象,我们可以直接将它们放入结果列表中。
graph_lock_andEdges_Array <- list(graphQueue, FINAL_LOCKED_NODES_ARRAY_REVERSED, FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES)
要访问列表中的单个元素,请使用双重方括号。我将在一些示例数据上进行演示。
graphQueue <- matrix(1:4, ncol=2)FINAL_LOCKED_NODES_ARRAY_REVERSED <- list(matrix(5:8, ncol=2))FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES <- list(matrix(9:12, ncol=2))graph_lock_andEdges_Array <- list(graphQueue, FINAL_LOCKED_NODES_ARRAY_REVERSED, FINAL_LOCKED_NODES_ARRAY_NON_REVERSED_CANDIDATES)# 显示第一个列表元素print(graph_lock_andEdges_Array[[1]])# 显示第二行第一个单元格print(graph_lock_andEdges_Array[[1]][2,1])
请注意,第二个和第三个元素是列表中的列表。要显示第二个列表元素中第二行第一个单元格,我们使用:
print(graph_lock_andEdges_Array[[2]][[1]][2,1])
回答第二个问题,是的,<- NULL
将清除对象的内容。
str(graph_lock_andEdges_Array)List of 3 $ : int [1:2, 1:2] 1 2 3 4 $ :List of 1 ..$ : int [1:2, 1:2] 5 6 7 8 $ :List of 1 ..$ : int [1:2, 1:2] 9 10 11 12graph_lock_andEdges_Array <- NULLstr(graph_lock_andEdges_Array) NULL