2
這段代碼工作正常:[R data.table lapply歸因列表類型的列
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]
會拋出
[.data.table
(dt,,。(count = .N),by = zips)中的錯誤: 'by'或'keyby'列表中的項目是長度(1,1,1)。每個元素的長度必須與x中的行或i(3)返回的行數相同。
我認爲它與lapply賦值操作,隨着環境的瀏覽器顯示
V1:整數98033個980341234 98033
拉鍊: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'。 –
完美,謝謝。 – Alex
如果你只在一列上使用它''V1',寫'zip:= fixit(V1)'。哦,我知道,它沒有矢量化。 – Frank