R 矩阵中数据对的求和极小值
我想比较矩阵中两行的元素,然后求出数据对的最小值 例如,在这样的矩阵中,结果应该是3(1+1+1+0) 我这样试过:R 矩阵中数据对的求和极小值,r,R,我想比较矩阵中两行的元素,然后求出数据对的最小值 例如,在这样的矩阵中,结果应该是3(1+1+1+0) 我这样试过: > findmin <- function (x) for (i in 1:ncol(x)) {min(x[1,i], x[2,i])} > res <- sum(findmin(m)) > res [1] 0 >findmin res [1] 0 我认为问题在于循环返回NULL作为一个值。我怎样才能避免这种情况?还是有更优雅的方法避免for循环
> findmin <- function (x) for (i in 1:ncol(x)) {min(x[1,i], x[2,i])}
> res <- sum(findmin(m))
> res
[1] 0
>findmin res
[1] 0
我认为问题在于循环返回NULL作为一个值。我怎样才能避免这种情况?还是有更优雅的方法避免for循环?apply()
是您的朋友:
R> M <- matrix(c(2,1,4,4,1,2,1,0), 2, 4, byrow=TRUE)
R> M
[,1] [,2] [,3] [,4]
[1,] 2 1 4 4
[2,] 1 2 1 0
R> apply(M, 1, min) # goes row-wise
[1] 1 0
R> apply(M, 2, min) # goes column-wise
[1] 1 1 1 0
R> sum(apply(M, 2, min))
[1] 3
R>
R>M
[,1] [,2] [,3] [,4]
[1,] 2 1 4 4
[2,] 1 2 1 0
R> 应用(M,1,min)#按行进行
[1] 1 0
R> 应用(M,2,min)#按列进行
[1] 1 1 1 0
R> 总和(适用于(M,2,min))
[1] 3
R>
求和(应用(m,2,min))
执行以下操作:
> m <- matrix(c(2,1,4,4,1,2,1,0), 2, byrow=TRUE)
> m
[,1] [,2] [,3] [,4]
[1,] 2 1 4 4
[2,] 1 2 1 0
> sum(apply(m, 2, min))
[1] 3
>m
[,1] [,2] [,3] [,4]
[1,] 2 1 4 4
[2,] 1 2 1 0
>总和(适用于(m,2,min))
[1] 3
解决此任务的更“R”的方法是使用apply函数:sum(apply(m,2,min))
您的for循环不起作用,因为您没有存储或返回任何值。下面是如何修复for循环。请注意,预先分配out
的大小使其执行速度更快:
findmin <- function(x){
out <- rep(NA, ncol(x))
for (i in 1:ncol(x)) {
out[i] <- min(x[1,i], x[2,i])
}
return(out)
}
> findmin(m)
[1] 1 1 1 0
findmin谢谢,这很有帮助。一段时间以来,我一直在试图弄清楚如何从R中的循环返回值。
findmin <- function(x){
out <- rep(NA, ncol(x))
for (i in 1:ncol(x)) {
out[i] <- min(x[1,i], x[2,i])
}
return(out)
}
> findmin(m)
[1] 1 1 1 0