如何将函数应用于R中的矩阵

时间:2016-10-13 14:55:57

标签: r matrix

编写一个函数,该函数采用可以强制转换为矩阵的矩阵;该函数应返回一个与函数参数相同的矩阵,但每个偶数都不会改变,奇数会加倍。

enter image description here

我对R.很新。有人可以帮我完成我的代码:

mx = matrix(c(1,1,3,5,2,6,-2,-1,-3), nrow = 3, byrow = TRUE)
fun = function(mx){
  for(i in mx){
    if(i %% 2 == 0){
      return(i)
    }
    else if(i %% 2 > 0){
      return(2*i)
    }
  }
}

3 个答案:

答案 0 :(得分:3)

不需要函数,只需使用内置函数ifelse

mx <- ifelse(mx %% 2 == 0, mx, 2*mx)

或者,如果您希望将其封装到函数中:

fun = function(mx) {
  ifelse(mx %% 2 == 0, mx, 2*mx)
}
res <- fun(mx)
##     [,1] [,2] [,3]
##[1,]    2    2    6
##[2,]   10    2    6
##[3,]   -2   -2   -6

<强>解释

ifelse对矩阵mx的所有元素执行矢量化比较,以查看每个元素是否为偶数(即mx %% 2 == 0)。对于每个元素,如果此比较条件为TRUE,则返回下一个参数,在这种情况下,它只是mx中该元素的值。否则,返回最后一个参数,它是2mx中该元素的值的{{1}}倍。

答案 1 :(得分:1)

使用指数很容易:)

double_odd <- function(mx){
  odds_idx <- (mx %% 2 != 0)
  mx[odds_idx] <- 2 * mx[odds_idx]
  mx # If it is the last statement, you don't need return
}

干杯

答案 2 :(得分:0)

使用你的尝试:

fun = function(mx){
 res <- matrix(data = NA, ncol = ncol(mx), nrow = nrow(mx))
  for(i in 1:ncol(mx)){
    for(j in 1:nrow(mx))
      if(mx[j, i] %% 2 == 0){
        res[j, i] <- mx[j, i] 
      }else{
        res[j, i] <- 2 * mx[j, i] 
      }
  }
 return(res)
}

当然不是最优雅的解决方案:)。