我使用lapply和mapply來創建一堆操作。我的數據由列表組成。創建列表清單的有效方法
對於其中一個計算,我在如何使用任何應用函數時遇到了一些問題。這是我想要做的一個例子:
#list with a collection of objects, each object has a vector with the their 2 closest neighbors identification.
list_a<-list(c(2,4),c(1,3),c(1,4),c(3,2))
#list with the obs of each point
list_obs<-list(runif(1000,1,2),runif(1000,0,2),runif(1000,0.5,2),runif(1000,0.1,1.5))
位置n
在list_a對應的嘶鳴。點n
位置n
在list_obs點對應點n
的意見我想要做的是創建將在每個位置n
的neighb的觀察之列存儲一個新的列表。分:
#output
out=list(list(list_obs[[2]],list_obs[[4]]),list(list_obs[[1]],list_obs[[3]]),list(list_obs[[1]],list_obs[[4]]),list(list_obs[[3]],list_obs[[2]]))
> str(out)
List of 4
$ :List of 2
..$ : num [1:1000] 1.673 1.423 0.228 1.758 1.65 ...
..$ : num [1:1000] 0.679 1.341 0.148 0.867 0.724 ...
$ :List of 2
..$ : num [1:1000] 1.25 1.5 1.58 1.54 1.6 ...
..$ : num [1:1000] 0.526 1.545 1.848 0.711 0.697 ...
$ :List of 2
..$ : num [1:1000] 1.25 1.5 1.58 1.54 1.6 ...
..$ : num [1:1000] 0.679 1.341 0.148 0.867 0.724 ...
$ :List of 2
..$ : num [1:1000] 0.526 1.545 1.848 0.711 0.697 ...
..$ : num [1:1000] 1.673 1.423 0.228 1.758 1.65 ...
任何人都可以告訴我最好的辦法嗎?
我的數據很龐大,因此循環需要花費很多時間來運行。數據由3000點(3000-1鄰近點)組成,每點有20,000個觀測值。
正如你所描述的你的數據,它可能是一個矩陣,左邊的兩列爲鄰居,和1000列的觀察。這可能更簡單。在循環中,對於循環而言(暗含)比內置應用(比如應用)要慢,這是一個神話,儘管你這樣做可能會導致效率低下。有些東西比如plyr可能更快..下面的例子..你可能會嘗試dput(頭(somedata,50))爲一個可重現的例子。 –
我不知道有一個最大的矩陣大小除了內存,看看爲什麼列表使用較少的內存或比相同元素的矩陣更容易處理。如果數據真的很大,可以考慮將它放在rsqlite和/或使用dplyr包中。 –