首页 > 解决方案 > lapply 函数对具有列表列的数据框列表

问题描述

我有一个数据框列表,下面是其中两个:

structure(list(a = list(c("280", "330", "399", "416"), "2962", 
    c("1095", "1765"), "764", "165"), b = list(c("72", "78", 
"88", "157", "398"), c("5", "93", "147", "174", "1046", "1325", 
"1347", "1659", "1739", "1992", "2053", "2286", "2401", "2433", 
"2607", "2653", "2750", "2768", "2852", "2946"), c("181", "366", 
"497", "608", "781", "929", "962", "1162", "1165", "1232", "1423", 
"1448", "1485", "1577", "1580", "1623", "1655", "1725"), c("125", 
"133", "470", "481", "566", "639", "715", "737", "781", "936", 
"957"), c("100", "140"))), .Names = c("a", "b"), row.names = c(1:5), class = "data.frame")

structure(list(a = list("965", "552", c("467", "493", "1433"
), "497", c("416", "1875")), b = list(c("285", "289", "305", 
"373", "510", "535", "548", "817", "862", "866", "977"), c("65", 
"282", "330", "455", "597", "921", "923"), c("153", "156", "157", 
"159", "198", "231", "271", "295", "336", "347", "466", "492", 
"516", "548", "605", "696", "705", "716", "720", "797", "861", 
"876", "1040", "1086", "1173", "1261", "1263", "1375", "1427", 
"1454", "1530", "1571", "1623", "1636"), c("17", "79", "151", 
"189", "193", "258", "543", "637"), c("131", "357", "539", "641", 
"756", "827", "848", "1079", "1280", "1364", "1429", "1454", 
"1485", "1493", "1547", "1602", "1629", "1711", "1786", "1817", 
"1864", "1944", "1955", "1960", "2379", "2400"))), .Names = c("a", 
"b"), row.names = 6:10, class = "data.frame")

请注意,列 a 和 b 也是列表。所以我有一个以列表为列的数据框列表。我正在尝试应用一个函数来生成一个新列,如下所示:

mylist <- lapply(mylist, function(x) {x$count_diff <- as.vector(t(abs(outer(as.numeric(x$a), as.numeric(x$b), FUN="-")))); x})

但我收到一个错误:

 Error in outer(as.numeric(x$a), as.numeric(x$b), FUN = "-") : 
  (list) object cannot be coerced to type 'double' 

所以如果我尝试使用子集运算符 [ & [[ 我会分别得到以下错误:

Error in `[.data.frame`(x, a) : object 'a' not found

Error in (function(x, i, exact) if (is.matrix(i)) as.matrix(x)[[i]] else .subset2(x,  : 
  object 'a' not found

我想看到的结果如下:

Inputs: a = 280 330 399 416, b = 72  78  88 157 398
Output: count_diff = "208 202 192 123 118 258 252 242 173 68 327 321 311 242 1 344 338 328 259 18"

但是,我无法访问列表中的元素,也不清楚为什么!任何帮助深表感谢!

标签: rlapply

解决方案


推荐阅读