[英]retrieving a list element in O(1) in R
假設我有以下內容:
a <- vector('list',50)
for(i in 1:50)
{
a[[i]] <- list(path=paste0("file",sample(0:600,1)),contents=sample(1:5,10*i,replace=TRUE))
}
現在,例如; 我想盡快檢索file45
的內容(假設它存在於此隨機生成的數據中)。
我嘗試了以下方法:
contents <- unlist(Filter(function(x) x$path=="file45",a),recursive=FALSE)$contents
但是,列表搜索開銷使得從內存中讀取的速度甚至比直接從磁盤讀取速度要慢(在某種程度上)。
是否有其他比以理想方式從磁盤讀取O(1)更快的速度檢索內容的方法?
編輯:假設我的子列表中沒有重復的文件filepaths
,並且很大程度上有50個以上的子列表
使用names
屬性來跟蹤項目:
a <- vector('list',50)
for(i in 1:50)
{
a[[i]] <- list(contents=sample(1:5,10*i,replace=TRUE))
}
names(a) <- paste0("file",sample(1:600,50))
a[["file45"]]
NULL
a[["file25"]]
$contents
[1] 3 1 3 1 2 5 1 5 1 2 3 1 4 1 1 4 1 5 1 5 1 4 5 2 5 2 2 5 1 1
請嘗試以下操作:
a[sapply(a, function(x) x$path == "file45")][[1]]$contents
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.