通過cbind列表的列表假設我們想對存儲在列表中的元素,例如,R:不平整
> x <- list()
> x[[1]] <- list(1,2)
> x[[2]] <- list(3,4)
> x
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[2]]
[[2]][[1]]
[1] 3
[[2]][[2]]
[1] 4
如果想創建級聯同樣的事情,沒有明確提及的外部列表的指標,自然的方法(見編輯下面的動機,這種做法)是
> c(list(list(1,2)),list(3,4))
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[2]]
[1] 3
[[3]]
[1] 4
有沒有辦法避免的第二個參數c()
的「扁平化」,從而使用級聯產生x
?
編輯:我應該已經明確了我的預期應用。
最後,我希望在我經歷一個循環時每當找到一個對時,都會將對添加到列表中。目前,我維護主列表的索引,以便在找到一個新對時在其末尾添加新對,但使用c
可能更自然。因此,使用明確的指標循環可能看起來像這樣
index <- 1
l <- list()
for (i in 1:10) {
for (j in (i+1):10) {
if ((i+j)%%2 == 0) {
l[[index]] <- list(i,j)
index <- index + 1
}
}
}
而失敗的嘗試使用c
看起來像這樣
l <- list()
for (i in 1:10) {
for (j in (i+1):10) {
if ((i+j)%%2 == 0)
l <- c(l,list(i,j))
}
}
答:由湯米下面,一個額外的表(注意)需要,所以下面的作品:
l <- list()
for (i in 1:10) {
for (j in (i+1):10) {
if ((i+j)%%2 == 0)
l <- c(l,list(list(i,j)))
}
}
有點顯而易見的事情,我應該想通了。湯米還指出,這可能不是一個很好的做事方式。
不知道你在找什麼,但它是'c(list(1,2),list(3,4))'? – Ramnath 2011-12-19 04:53:27
作爲一般性評論,如果您的實際問題與您的示例代碼相似,那麼將附加事項添加到列表末尾不太可能是正確的方法(正如您發現的那樣,如果R中存在尷尬)。當你遇到一個簡單的任務感到尷尬的時候,這是一個好兆頭,你沒有用這個語言的方式來解決你的問題。 – joran 2011-12-19 05:41:36
很高興你解決了你的直接問題,我會重申我在下面說的:預分配。這個答案顯示了一些性能比較......它可以很容易地用更復雜的函數將氣泡上升到幾分鐘或幾小時。祝你好運! http://stackoverflow.com/questions/4034059/iteratively-constructed-dataframe-in-rx – Chase 2011-12-19 05:44:52