r - 向量化 R 中的哪些语句

标签 r

我目前有以下代码。

names <- c("Red","Green","Blue","Orange","Yellow")
aMatrix <- matrix(data=0,nrow=5,ncol=5)
df <- data.frame(matrix(nrow=5,ncol=2))
colnames(df)=c("Number","name")    
selectedRows=sample(1:5, 5)
samples=sample(1:5, 5)
for (i in 1:5){
    df[i,"Number"]=i
    df[i,"name"]=names[samples[i]]
}
for (i in 1:5){
    aMatrix[i,which(names==df[selectedRows[i],"name"])]=1
}

有没有办法对最后一个循环进行矢量化,使其运行得更快?

最佳答案

可以通过使用 match 创建列索引,cbind 行索引与列索引来从 aMatrix 中提取值来完成并将它们分配给 1

aMatrix2 <- aMatrix # before the assignment in OP's code
aMatrix2[cbind(seq_len(nrow(aMatrix)), match(df$name[selectedRows], names))] <- 1

-检查

identical(aMatrix, aMatrix2)
#[1] TRUE

关于r - 向量化 R 中的哪些语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880980/

相关文章:

r - 如何在两个不同的数据帧上运行 cor.test()

r - 如何从 R 的工作区中删除除一个对象之外的所有对象?

r - 在 Perl 中更有效地处理 AoA 的笛卡尔积

r - 如何使用ggplot2创建一维图表?

r - 计算一组间隔之间的成对距离

r - 使用数据库时 dplyr 加入 : How do you do a non standard join `col1` ! = `col2`?

r - 基本 R 指南 : verbatim ? 与 R 中的 knitr

ggplot2 中面的旋转

r - 我可以用字节码编译我的R包吗?

r - 使用列的分类值删除R中的索引