通过相同的索引/向量包含多个类的子集列表

达斯尔

我需要对包含数组和因子变量的列表进行子集化。基本上,如果您想象数组的每个组件都与单个个体相关,然后将其与两个因素变量(治疗)相关联。

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 中的数组组件。但是,对于列表的因子组件,这将不起作用,因为子集不同,您需要的是:

 list$treatment[c(2,4,6)]

需要按相同的相对数对包含不同类(数组和向量)的列表进行子集化。

埃米尔·博德

您将矩阵列表视为某种 3 维对象,但事实并非如此。
list$matrices本身也是一个列表,这意味着您也可以将 at 作为列表进行索引,无论它是矩阵列表、数字列表、绘图对象列表还是其他任何内容都没有关系。

您作为示例提供的数据只能在一个级别上建立索引,因此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 式,您之前的带有矩阵列表的示例对我来说更有意义。我认为最合乎逻辑的应该是一个带有列矩阵和处理的 data.frame(它在概念上接近带有向量和矩阵列表的列表,但对其他人来说你拥有的更清楚)。

但无论如何,你想要的输出是什么?
如果它只是子集:使用这种结构,因为对可能是内容的内容没有限制,您只需告诉 R 确切您想要什么。没有一个运算符可以同时获取向量的子集和数组的第三个索引。您将不得不告诉 R 您希望将第三个索引用于子集化,并且您希望使用相同的索引来对向量进行子集化。这基本上只是您已经拥有的代码:

idx <- c(2,4,6)
output <- list(list$array[,,idx], list$treatment[idx])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章