假设我有以下内容:
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个子列表
答案 0 :(得分:2)
使用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
答案 1 :(得分:0)
尝试以下方法:
a[sapply(a, function(x) x$path == "file45")][[1]]$contents