Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在预分配数据结构后提高R for循环的性能_R_Performance_For Loop - Fatal编程技术网

在预分配数据结构后提高R for循环的性能

在预分配数据结构后提高R for循环的性能,r,performance,for-loop,R,Performance,For Loop,我读过一些关于在r中提高for循环性能的文章,但我仍然坚持一个需要140秒的循环 我将从代码开始: matrix <- matrix(NA, length(register[,1]), length(AK), dimnames = list(register[,1], AK)) data.cleaned <- data[data$FO %in% register[,1],] rownames(data.cleaned) <- paste(1:nrow(data.cleaned

我读过一些关于在r中提高for循环性能的文章,但我仍然坚持一个需要140秒的循环

我将从代码开始:

matrix <- matrix(NA, length(register[,1]), length(AK), dimnames = list(register[,1], AK))

data.cleaned <- data[data$FO %in% register[,1],]
rownames(data.cleaned) <- paste(1:nrow(data.cleaned))


for (i in 1 : nrow(data.cleaned)) {
  for (j in 1 : nrow(matrix)) {

    if (data.cleaned$FO[i] == rownames(matrix)[j]) {
        for (k in 1 : ncol(matrix)) {

              if (data.cleaned$AK[i] == colnames(matrix)[k])
                  {matrix[j,k] <- 1}

      }
    }  
  }
}
矩阵第一步:
你可以设置

cnames.m <- colnames(matrix)

关于对象名称的一条注释:

给矩阵命名不是一个好主意(你能给一只狗命名吗?)

因为循环本身在R中的性能不是很好,试着用矢量化函数等替换尽可能多的循环。我的答案中的代码需要多少秒才能显示在你的数据上?
if (data.cleaned$AK[i] == cnames.m[k]) matrix[j,k] <- 1
matrix[j, data.cleaned$AK[i] == cnames.m] <- 1
matrix <- matrix(NA, length(register[,1]), length(AK), dimnames = list(register[,1], AK))

data.cleaned <- data[data$FO %in% register[,1],]
rownames(data.cleaned) <- paste(1:nrow(data.cleaned))

cnames.m <- colnames(matrix)
for (i in 1 : nrow(data.cleaned)) for (j in 1 : nrow(matrix)) 
    if (data.cleaned$FO[i] == rownames(matrix)[j]) matrix[j, data.cleaned$AK[i] == cnames.m] <- 1