我正在使用dataFrame_1中的数据计算分数,并使用嵌套for循环填充400M单元格dataFrame_2。 为了测试我的代码和作业,我创建了模拟数据,其中:
(cellxcl_df)代理dataFrame_1 (cellxcell_df)代理DataFrame_2
从下面的代码中可以看出,嵌套for循环需要1.8分钟来填充数据(cellxcell_df中的1M单元格。)如果是线性的,当将它应用于实际数据时,我将需要等待12小时才能生成下一次与数据的互动。
因为我读过很多次lapply比循环快得多,所以尝试了嵌套的lapply代码。然而,令我惊讶的是,我必须杀死这个过程,因为它已经被采取了>原始for循环时间的10倍。我在嵌套的lapply循环中做错了什么,或嵌套的lapply在时间上都没那么高效?
###create toy dataframes to try the code
```{r}
nm <- c(paste("c", (1:1000), sep=""))
cellxcell_df <- data.frame(matrix(ncol=1000, nrow=1000))
colnames(cellxcell_df) <- nm
rownames(cellxcell_df) <- nm
cellxcl_val <- sample(1:10,10000, replace = TRUE)
cellxcl_df <-data.frame(matrix(cellxcl_val,ncol=1000, nrow=10))
colnames(cellxcl_df) <- nm
```
#####This is the code with for loop
```{r}
start.time <- Sys.time()
for (i in rownames(cellxcell_df)) {
for (j in colnames(cellxcell_df)) {
cellxcell_df[i,j] <- sum(cellxcl_df[, i] == cellxcl_df[, j])
}
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
```
下面是我尝试用嵌套的lapply循环替换嵌套的for循环
```{r}
start.time <- Sys.time()
lapply(as.list(rownames(cellxcell_df)), function(i){
lapply(as.list(rownames(cellxcell_df)), function(j){
cellxcell_df[i,j] <- sum(cellxcl_df[, i] == cellxcl_df[, j]) })
})
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
```
任何帮助将不胜感激