使用apply优化R中的嵌套for循环?

optimize a nested for loop in R, using apply?

我想优化以下嵌套 for 循环,它遍历数据框中的 select 列集并检查它是否对应于向量中的 values/strings:

Positions=c()
for (col in vectorCols ) {
    for (code in vectorCodes ){
      Positions<- c(Positions,which(as.numeric(df[,col])==code))
    }

数据框很大,有 800,000 行。 vectorCodes 可以有 100 个项目和大约 20 selected 列(共 2000 个)。

我也试过类似下面的方法,但没有用

  FunctionGrepCol<-function(col){
    Positions <- unlist( lapply( vectorCodes , function(x) (Positions,which(as.numeric(df[,col])==x)) ) )
  }
  Positions <-unlist(lapply(vectorCols, FunctionGrepCol ))

有没有办法将嵌套的for循环放在apply函数中进行优化?

您可以尝试这个解决方案,而不是循环遍历列名和子集,您可以先对数据框进行子集化,然后像列表一样循环遍历它。

Positions <- unlist(lapply(df[, vectorCols], function(col) which(col %in% vectorCodes)))