在预分配数据结构后提高R for循环的性能
我读过一些关于在r中提高for循环性能的文章,但我仍然坚持一个需要140秒的循环 我将从代码开始:在预分配数据结构后提高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
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