R 矩阵中数据对的求和极小值

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循环

我想比较矩阵中两行的元素,然后求出数据对的最小值

例如,在这样的矩阵中,结果应该是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循环?

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