我知道这似乎过分依赖于SO,但我是一名初学者并且在此工作了几天但没有成功。我可以为单个表执行此操作,但是当列表中的代码不起作用时。我希望每个人都了解情况。
我们在列表中有一个元素列表:
ls<-list("N","E","E","N","P","E","M","Q","E","M")
我们在列表中有另一个表列表:
n <- list("M", "N","E","P","Q","M","N","E","Q","N")
tb <- lapply(1:10, function(i)matrix(sample(4), 2, 2,
dimnames=list(n[sample(10,2)], n[sample(2,2)])))
我们需要从列表中的表中提取值,其中colname始终为“M”,其中rowname应该是列表tb中表1中的第一个元素,表2中的表2中的第二个元素,依此类推...
例如:
M N
N 4 1
P 3 2
在表1中,我们需要提取值4.
答案 0 :(得分:1)
我放弃了。以下是我认为可能接近期望结果的内容,但是1)为再现性设置种子,2)将名称更改为“ls1”和“n1”,使它们不与ls
函数重叠,更“具体”:
set.seed(123)
tb <- lapply(1:10, function(i) matrix(sample(4), 2, 2,
dimnames=list( n1[sample(10,2)], n1[sample(2,2)])))
val <- rep(NA,10)
for (i in seq_along(tbls) ){
# will a need A test for both alpha values having match with the two dimnames
rowidx <- which(dimnames(tb[[i]])[[1]] == ls1[[i]]) # often length==0
colidx <- which(dimnames(tb[[i]])[[2]] == n1[[i]])
if( length(rowidx) & length(colidx) ){
val[i] <- tb[[i]][rowidx,colidx]
} else { val[i] <- "not" }
> val
[1] "1" "not" "not" "not" "not" "not" "not" "not" "not" "2"
我合理化提供了一个工作实例,假设情况是由一些外部资源产生的设计糟糕的数据结构,只需要“应对”。它确实说明了使用seq_along作为索引,使用[[
访问列表结构,以及处理缺少哪些/匹配可能性的方法。我仍然认为这不应该被用作解决问题的模板。