R data.table lapply 将列表类型归于一列

R data.table lapply attributing a list type to a column

这段代码工作正常:

dt <- data.table(c(as.integer(98033),as.integer(980341234),as.integer(98033)),c(1,2,3))
dt[,.(count=.N),by=V1]

我的问题出在这个代码块中:

dt <- dt[,zips:=lapply(V1,fixzip)]
dt[,.(count=.N),by=zips]

哪个抛出

Error in [.data.table(dt, , .(count = .N), by = zips) : The items in the 'by' or 'keyby' list are length (1,1,1). Each must be same length as rows in x or number of rows returned by i (3).

我认为这与 lapply 分配有关,正如环境浏览器显示的

V1 : int 98033 980341234 98033

zips:List of 3

..$ : int 98033

..$ : int 98034

..$ : int 98033

如何将 lapply 分配的列表更改为普通列?或者,如果有人可以指出我更好的 'R' 方法来做到这一点,我们将不胜感激。

如果相关,fixzip 函数如下所示:

fixzip <- function(zip){
  if(is.finite(zip) == 0){
    return(0)
  }
  if(zip < 10000){
    return(0)
  }
  if(zip > 100000){
    return(as.integer(floor(zip/10000)))
  }
  return(zip)
}

使用 sapply() 而不是 lapply()。应用 returns 向量,而 lapply returns 列表。感谢@David Arenburg。