我需要对包含数组以及因子变量的列表进行子集化。本质上,如果您想像数组的每个组件都相对于单个个体,然后将其关联到两个因子变量(处理)。
list(array=array(rnorm(2,4,1),c(5,5,10)), treatment= rep(c(1,2),5))
通常,当从列表的第一个组件中设置数组的多个组件时,我会使用类似的
list$array[,,c(2,4,6)]
这将返回位置2,4和6处的数组组件。但是,对于列表中的factor组件,由于子集不同,这将不起作用,您需要的是:
list$treatment[c(2,4,6)]
需要以相同的相对数量对包含不同类(数组和向量)的列表进行子集化。
答案 0 :(得分:0)
您正在将矩阵列表视为某种3维对象,但事实并非如此。
您的list$matrices
本身也就是一个列表,这意味着您也可以作为一个列表进行索引,无论它是矩阵,数值,绘图对象还是其他对象的列表都没关系。>
您作为示例提供的数据只能在一个级别上建立索引,因此list$matrices[c(2,4,6)]
可以正常工作。
我真的没有收到有关将索引保存在数字矢量中的问题,这是什么使您无法使用此代码?
indices <- c(2,4,6)
mysubset <- list(list$matrices[indices], list$treatment[indices])
我看到您现在实际上有一个3-D阵列。这有点怪异,因为没有明确的约定可以视为“组件”。我的意思是,从您的问题中我了解到list$array[,,n]
指的是第n个人,但是从纯代码角度来看,没有理由为什么list$array[n,,]
之类的人不能提及该词。
也许您从其他语言中得到了这个主意,但这并不是真正的R-ish,您以前的示例中列出了矩阵列表,这对我来说更有意义。而且我认为最合乎逻辑的是带有列矩阵和处理的data.frame(从概念上讲,它接近于带有向量的列表和矩阵的列表,但对其他人更清楚)。
但是无论如何,您想要的输出是什么?
如果只是子集的话:通过这种结构,由于对内容的内容没有任何限制,因此您只需要告诉R您想要的内容即可。没有一个运算符可以同时获取向量的子集和数组的第三个索引。您将不得不告诉R您希望将第3个索引用于子集,并且希望使用相同的索引对向量进行子集。基本上,这只是您已经拥有的代码:
idx <- c(2,4,6)
output <- list(list$array[,,idx], list$treatment[idx])
答案 1 :(得分:0)
用于子集多个矩阵的方法实际上会产生错误,因为尽管您已经指定了所在的子列表,但您仍在给出额外的维数。因此,可以使用给定索引的矩阵子集来使用my_list$matrices[indices]
或直接my_list[[2]][indices]
。案件处理my_list$treatement[indices]
或{{1}}