我有以下结构的列表:(它的样本)
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
这是因为列表结构的变化还是完全不同的?请帮忙。
答案 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长度
的列表元素应用该函数