比方说,我在R中有一个data.table。我想将其转换为一个列表,其中每个元素都是一个单独的data.table,仅包含一行。然后,我有一个应用于每个单行数据表的函数。我想限制输出。
我尝试了Apply系列的许多版本,但无法使其正常工作。
我想做以下事情,但是使用apply函数作为我的真实数据。表非常大,其中有很多。而且,实际功能要复杂得多。
DT <- data.table(
ID = c("b","a","c"),
a = 1:3,
b = 7:9,
c = 13:15
)
DT1<-DT[1]
DT2<-DT[2]
DT3<-DT[3]
list<-list(DT1, DT2, DT3)
myfunction<-function(D){
return(rbind(D, D))
}
DT1new<-myfunction(list[[1]])
DT2new<-myfunction(list[[2]])
DT3new<-myfunction(list[[3]])
result<-rbind(DT1new, DT2new, DT3new)
result
答案 0 :(得分:1)
您首先希望:将data.table转换为许多列表,其中每个表在原始表中都是一行:
lapply(seq_len(nrow(DT)), function(i) DT[i])
# or
split(DT, seq_len(nrow(DT)))
根据应用程序上的当前描述(重复当前行),您可以使用以下方法跳过此第一步:
DT[rep(seq_len(.N), each = 2)]
# or
DT[, .SD[c(1,1)], by = seq_len(nrow(DT))]
通常,您应该能够(一次操作一行):
DT[, myFunction(.SD), by = seq_len(nrow(DT))]