我有一個新問題: 我刪除全局列表中的元素,但我通過使用return()函數。我看到我的其他元素仍然在他的地址(使用檢查),但操作後的對象不具有相同的tracemem。 也許我不明白tracemem,但刪除後,我是否移動或複製了一些東西?! 我想用列表對象中的大數據並行化一些操作,當我完成釋放內存時刪除變量,所以我想確保我使用同一個對象。R - 如何從函數的列表中刪除元素
謝謝。
參考信息:How can I remove an element from a list?
# WHEN YOU HAVE BIG DATA, after a process you want to free some memory of your
# object by remove a variable data
# E.G open a *.mat file with structured style -> list
#
# Try with big data and wait a while (your computer) to know
# object_size and mem_used()
#
#------------------------------------------------------------
#With Global Variable
x <- list('a'=123456789,'b'='highlander')
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
# Remove data
x['a'] <- NULL
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
#------------------------------------------------------------
# with function 1 - NOT WORKED
# FREE MEMORY
freeMemoryFromStructuredList1 <- function(x,select){
paste(length(x),object_size(x),mem_used(),tracemem(x))
x[select]<- NULL
}
#With Function 1
x <- list('a'=123456789,'b'='highlander')
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
# TRy to Remove data
freeMemoryFromStructuredList1(x,'a')
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
#------------------------------------------------------------
#With Function 2 (return) - WORK, Highlander at the same Address,
# but tracemem NOT
# FREE MEMORY
freeMemoryFromStructuredList2 <- function(x,select){
paste(length(x),object_size(x),mem_used(),tracemem(x))
x[select]<- NULL
return(x)
}
x <- list('a'=123456789,'b'='highlander')
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
# Remove data
x <-freeMemoryFromStructuredList2(x,'a')
names(x)
paste(length(x),object_size(x),mem_used(),tracemem(x))
.Internal(inspect(x))
這就是我對結果所設想的結果,但我希望有一種方法可以像C中那樣通過引用。 我不再尋求進一步的了。 謝謝DMT – swatz 2014-09-18 17:48:11
沒問題,很高興我可以幫忙 – DMT 2014-09-18 17:56:10