分割后R list strcuture发生了变化,我得到了错误

时间:2016-12-06 03:40:53

标签: r

我有以下结构的列表:(它的样本)

dput
structure(c(-2.5671541557256, 0, 0, 0, 3.4065145441717, 
3.26323559295213, 0, 0, -3.9720219717256, -4.25576002872732, 
0, 0, 0, 0, 0, 0, 4.70164397285001, 3.98759425336171, -5.21839418370837, 
-5.22607347078334, 0, 0, 0, 0, 0, 0, 0, 8.55820528567553, -11.845429347973, 
0, 0, 12.8723841389153, -18.0482215887575, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0,-2.53671223453425, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29.7594053034137, 28.3027442062031, 
0, 0, -31.8167071494086, 24.6304210515793, 0, 0, -28.6871184676624, 
22.7764979716831, -28.6587552600709, -31.7152869653583, 0, 0, 
0, 0, 0, 0, 59.5748909388383, 51.4308255635962, 0, 0, -48.6871743127326, 
-59.4478429661327, 0, 0), .Names = c("11", "12", 
"13", "14", "15", "16", "17", "18", "19", "110", "111", "112", 
"113", "114", "115", "116", "117", "118", "119", "120", "121", 
"122", "123", "124", "125", "126", "127", "128", "129", "130", 
"131", "132", "133", "134", "135", "136", "137", "138", "139", 
"140", "141", "142", "143", "144", "145", "146", "147", "21", 
"22", "23", "24", "25", "26", "27", "28", "29", "210", "211", 
"212", "213", "214", "215", "216", "217", "218", "219", "220", 
"221", "222", "223", "224", "225", "226", "227", "228", "229", 
"230", "231", "232", "233", "234", "235", "236", "237", "238", 
"239", "240", "241",))

应用此代码后:split(priceboot1, rep(1:500, unlist(num)))将上述内容拆分为不同的块,列表结构如下:

structure(list(`1` = structure(c(-2.5671541557256, 0, 0, 0, 3.4065145441717, 
3.26323559295213, 0, 0, -3.9720219717256, -4.25576002872732, 
0, 0, 0, 0, 0, 0, 4.70164397285001, 3.98759425336171, -5.21839418370837, 
-5.22607347078334, 0, 0, 0, 0, 0, 0, 0, 8.55820528567553, -11.845429347973, 
0, 0, 12.8723841389153, -18.0482215887575, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0), .Names = c("11", "12", "13", "14", "15", 
"16", "17", "18", "19", "110", "111", "112", "113", "114", "115", 
"116", "117", "118", "119", "120", "121", "122", "123", "124", 
"125", "126", "127", "128", "129", "130", "131", "132", "133", 
"134", "135", "136", "137", "138", "139", "140", "141", "142", 
"143", "144", "145", "146", "147")), `2` = structure(c(-2.53671223453425, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29.7594053034137, 28.3027442062031, 
0, 0, -31.8167071494086, 24.6304210515793, 0, 0, -28.6871184676624, 
22.7764979716831, -28.6587552600709, -31.7152869653583, 0, 0, 
0, 0, 0, 0, 59.5748909388383, 51.4308255635962, 0, 0, -48.6871743127326, 
-59.4478429661327, 0, 0), .Names = c("21", "22", "23", "24", 
"25", "26", "27", "28", "29", "210", "211", "212", "213", "214", 
"215", "216", "217", "218", "219", "220", "221", "222", "223", 
"224", "225", "226", "227", "228", "229", "230", "231", "232", 
"233", "234", "235", "236", "237", "238", "239", "240", "241"
)),

然后当我在类似的列表结构上尝试此代码时:getinvbootnum<-lapply(finalfinalpriceboot, FUN=function(x) seq(1,length(x),by=2))我收到错误Error in seq.default(1, length(x), by = 2) : wrong sign in 'by' argument

这是因为列表结构的变化还是完全不同的?请帮忙。

1 个答案:

答案 0 :(得分:0)

看起来其中一个子列表的大小为零。

更改

apply(finalfinalpriceboot, FUN=function(x) seq(1,length(x),by=2)) 

apply(finalfinalpriceboot[sapply(finalfinalpriceboot, length) > 0], FUN=function(x) seq(1,length(x),by=2)) 

将仅使用> 0长度

的列表元素应用该函数