r - 是否有另一种方法可以在 R 中不使用 for 循环来编写以下函数?
问题描述
我正在尝试在没有 for 循环的情况下编写以下函数。请注意,我正在尝试复制该功能diag()
。
selfdiag <- function(a) {
j <- c()
for (i in 1:ncol(a)) {
j[i] <- a[i, i]
}
return(j)
}
考虑一下:
mat <- matrix(rnorm(4), ncol = 2)
该函数selfdiag()
应创建与 相同的结果diag()
。感谢您对此的任何帮助。
解决方案
您可以使用对角线的行和列索引创建一个数据框,并使用它从矩阵中提取对角线值。
mat <- matrix(rnorm(4), ncol = 2)
diag()
这样做的方法 -
diag(mat)
[1] -0.5004046 -0.8785558
另一种方法-
rows_cols <- data.frame(rows = c(1:ncol(mat)), cols = c(1:ncol(mat)))
mat2 <- mat[as.matrix(rows_cols)]
mat2
[1] -0.5004046 -0.8785558
希望这可以帮助!
推荐阅读
- html - SVG 没有出现在 Firefox 中
- .net - 项目可以引用其他项目中未在 .NET Core/.NET Standard 中直接引用的类
- java - 如何将单击的图像从 GridView 传递到自定义警报对话框
- c# - Count() 列表中的特定属性 c#
- android - Tabhost 内容未显示
- python - 尝试在python中创建一个坐标圈
- java - java - 为什么Java中不允许使用通配符作为通用参数的扩展?
- python-sphinx - 更改字段列表的宽度
- javascript - 函数被多次调用?
- java - Java - 将一个列表中的对象属性映射到另一个对象列表