如何编写R自定义函数实现矩阵内所有奇数乘以0.618
R语言矩阵奇数缩放函数实现
最优向量化实现(推荐)
R支持原生向量化操作,不需要编写for循环即可完成元素筛选和赋值,执行效率更高,代码更简洁:
# 自定义函数:仅接收矩阵,将所有奇数乘以0.618 scale_odd_matrix <- function(mat) { # 参数类型校验 if (!is.matrix(mat)) { stop("参数错误:仅支持矩阵类型输入") } # 筛选奇数元素并赋值 mat[mat %% 2 == 1] <- mat[mat %% 2 == 1] * 0.618 return(mat) }
测试示例
# 构造测试矩阵 test_mat <- matrix(1:6, nrow = 2, byrow = TRUE) print(test_mat) # [,1] [,2] [,3] # [1,] 1 2 3 # [2,] 4 5 6 # 调用函数 result_mat <- scale_odd_matrix(test_mat) print(result_mat) # [,1] [,2] [,3] # [1,] 0.618 2.000 1.854 # [2,] 4.000 3.090 6.000
for循环实现(仅作参考,不推荐)
如果需要用for循环完成元素替换,可通过双层循环遍历矩阵的行和列索引,逐元素判断后修改:
scale_odd_matrix_loop <- function(mat) { if (!is.matrix(mat)) { stop("参数错误:仅支持矩阵类型输入") } # 遍历所有行 for (i in seq_len(nrow(mat))) { # 遍历所有列 for (j in seq_len(ncol(mat))) { val <- mat[i, j] # 判断为奇数则修改 if (val %% 2 == 1) { mat[i, j] <- val * 0.618 } } } return(mat) }
说明:向量化实现底层为C语言执行,对于大尺寸矩阵的处理速度远高于R层的for循环,生产环境优先选择向量化方案。
内容的提问来源于stack exchange,提问作者r problems
相关产品推荐
相关产品推荐

