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。
这段代码工作正常:
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。