编写一个函数,该函数采用可以强制转换为矩阵的矩阵;该函数应返回一个与函数参数相同的矩阵,但每个偶数都不会改变,奇数会加倍。
我对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)
}
}
}
答案 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
中该元素的值。否则,返回最后一个参数,它是2
中mx
中该元素的值的{{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)
}
当然不是最优雅的解决方案:)。