如何根据另一个列表对列表进行子集化? .subset(x, j) 中的错误:无效的下标类型 'list'

How do I subset a list based on another list? Error in .subset(x, j) : invalid subscript type 'list'

我想根据 r 列表(r0r1)的子集对 p 列表进行子集化。

> head(p)
        JHU_113_2.CEL JHU_144.CEL JHU_173.CEL JHU_176R.CEL JHU_182.CEL
2315252       0.09655     0.04224     0.22314      0.03202     0.03889
2315253       0.64864     0.38068     0.49589      0.38359     0.93560
2315374       0.00730     0.00293     0.03034      0.02571     0.00436
2315375       0.11744     0.29977     0.21102      0.21728     0.33313
2315376       0.04079     0.01525     0.03090      0.08493     0.01303
2315377       0.01269     0.02355     0.09147      0.31425     0.13685
        JHU_186.CEL JHU_187.CEL JHU_188.CEL JHU_203.CEL JHU_205.CEL JHU_207.CEL
2315252     0.03532     0.06716     0.35315     0.69236     0.21461     0.36181
2315253     0.28369     0.39982     0.20404     0.25617     0.97292     0.48171
2315374     0.00788     0.00520     0.01704     0.03273     0.06720     0.06545
2315375     0.10076     0.32012     0.45451     0.34734     0.01755     0.32847
2315376     0.03559     0.02163     0.01586     0.04264     0.05689     0.08093
2315377     0.01356     0.00897     0.43832     0.43092     0.37055     0.08548
        JHU_210.CEL JHU_211R3.CEL JHU_214.CEL JHU_215.CEL JHU_220.CEL
2315252     0.36106       0.13470     0.49530     0.10391     0.31615
2315253     0.33458       0.64219     0.88915     0.73075     0.58742
2315374     0.00116       0.00873     0.05717     0.06269     0.03684
2315375     0.07026       0.24551     0.40584     0.31307     0.40265
2315376     0.11264       0.02603     0.19339     0.01830     0.01725
2315377     0.03770       0.08637     0.11037     0.14717     0.18223
        JHU_221.CEL JHU_222.CEL JHU_229.CEL JHU_231.CEL JHU_80.CEL JHU_88.CEL
2315252     0.07842     0.45757     0.04073     0.09254    0.06598    0.07061
2315253     0.36090     0.60542     0.99010     0.90981    0.26533    0.24361
2315374     0.02094     0.10975     0.00359     0.00764    0.03794    0.00038
2315375     0.13955     0.37944     0.15815     0.09675    0.08247    0.10321
2315376     0.00266     0.05912     0.04784     0.00909    0.08888    0.01415
2315377     0.03133     0.28770     0.03233     0.18698    0.17952    0.01129
        JHU_95.CEL JHU_016.CEL JHU_046.CEL JHU_096.CEL
2315252    0.01362     0.52139     0.11005     0.02028
2315253    0.73908     0.96300     0.57058     0.77603
2315374    0.00174     0.01604     0.00796     0.02158
2315375    0.18741     0.12899     0.19215     0.21786
2315376    0.00787     0.09430     0.00815     0.03281
2315377    0.04137     0.10129     0.03751     0.02363

> head(r)
  Class       Results
1     1 JHU_113_2.CEL
2     0   JHU_144.CEL
3     1   JHU_173.CEL
4     1  JHU_176R.CEL
5     1   JHU_182.CEL
6     0   JHU_186.CEL

> r0 <- subset(r, Class == 0)
> r1 <- subset(r, Class == 1)

> p0 <- p[,r0]

回溯:

Error in .subset(x, j) : invalid subscript type 'list'

subset 应该总是 return a data.frame,我认为你不能使用框架作为 [.data.frame 的列索引(第二个位置参数) .

相反,提取 $Results 列以形成 向量

r0 <- subset(r,Class == 0)$Results
r0
# [1] "JHU_144.CEL" "JHU_186.CEL"
p[,r0]
#         JHU_144.CEL JHU_186.CEL
# 2315252     0.04224     0.03532
# 2315253     0.38068     0.28369
# 2315374     0.00293     0.00788
# 2315375     0.29977     0.10076
# 2315376     0.01525     0.03559
# 2315377     0.02355     0.01356

实际上,使用 subset 时的问题是 drop= 的默认值是 FALSE,这意味着即使您 subset(..., select=) select单列,它仍然 return 一列(一帧)而不是向量。除了 $Results,您还可以使用 subset(r, Class == 0, select = Results, drop = TRUE) 来获得类似的效果。


数据

p <- structure(list(JHU_113_2.CEL = c(0.09655, 0.64864, 0.0073, 0.11744, 0.04079, 0.01269), JHU_144.CEL = c(0.04224, 0.38068, 0.00293, 0.29977, 0.01525, 0.02355), JHU_173.CEL = c(0.22314, 0.49589, 0.03034, 0.21102, 0.0309, 0.09147), JHU_176R.CEL = c(0.03202, 0.38359, 0.02571, 0.21728, 0.08493, 0.31425), JHU_182.CEL = c(0.03889, 0.9356, 0.00436, 0.33313, 0.01303, 0.13685), JHU_186.CEL = c(0.03532, 0.28369, 0.00788, 0.10076, 0.03559, 0.01356), JHU_187.CEL = c(0.06716, 0.39982, 0.0052, 0.32012, 0.02163,  0.00897), JHU_188.CEL = c(0.35315, 0.20404, 0.01704, 0.45451, 0.01586, 0.43832), JHU_203.CEL = c(0.69236, 0.25617, 0.03273, 0.34734, 0.04264, 0.43092), JHU_205.CEL = c(0.21461, 0.97292, 0.0672, 0.01755, 0.05689, 0.37055), JHU_207.CEL = c(0.36181, 0.48171, 0.06545, 0.32847, 0.08093, 0.08548), JHU_210.CEL = c(0.36106, 0.33458, 0.00116, 0.07026, 0.11264, 0.0377), JHU_211R3.CEL = c(0.1347, 0.64219, 0.00873, 0.24551, 0.02603, 0.08637), JHU_214.CEL = c(0.4953, 0.88915, 0.05717, 0.40584, 0.19339, 0.11037 ), JHU_215.CEL = c(0.10391, 0.73075, 0.06269, 0.31307, 0.0183, 0.14717), JHU_220.CEL = c(0.31615, 0.58742, 0.03684, 0.40265, 0.01725, 0.18223), JHU_221.CEL = c(0.07842, 0.3609, 0.02094, 0.13955, 0.00266, 0.03133), JHU_222.CEL = c(0.45757, 0.60542, 0.10975, 0.37944, 0.05912, 0.2877), JHU_229.CEL = c(0.04073, 0.9901, 0.00359, 0.15815, 0.04784, 0.03233), JHU_231.CEL = c(0.09254, 0.90981, 0.00764, 0.09675, 0.00909, 0.18698), JHU_80.CEL = c(0.06598, 0.26533, 0.03794, 0.08247, 0.08888, 0.17952), JHU_88.CEL = c(0.07061,  0.24361, 0.00038, 0.10321, 0.01415, 0.01129), JHU_95.CEL = c(0.01362, 0.73908, 0.00174, 0.18741, 0.00787, 0.04137), JHU_016.CEL = c(0.52139, 0.963, 0.01604, 0.12899, 0.0943, 0.10129), JHU_046.CEL = c(0.11005, 0.57058, 0.00796, 0.19215, 0.00815, 0.03751), JHU_096.CEL = c(0.02028, 0.77603, 0.02158, 0.21786, 0.03281, 0.02363)), class = "data.frame", row.names = c("2315252", "2315253", "2315374", "2315375", "2315376", "2315377"))
r <- structure(list(Class = c(1L, 0L, 1L, 1L, 1L, 0L), Results = c("JHU_113_2.CEL", "JHU_144.CEL", "JHU_173.CEL", "JHU_176R.CEL", "JHU_182.CEL", "JHU_186.CEL")), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))