R语言使用两层for循环为不同level生成对应pro向量的实现问题
问题原因
- 原代码的
return(pro)语句放置位置错误,放在了遍历level的外层循环内部,第一次循环处理完level=1的计算后就直接返回了结果,不会执行后续level的计算逻辑 - 原代码仅用一维向量
pro存储结果,无法容纳5个level分别对应的7个计算值
修正方案
方案1:保留循环逻辑修改
只调整存储结构和return位置即可:
sumpro <- function(day, level) { # 初始化矩阵存储所有结果,每行对应一个level的pro向量 pro <- matrix(nrow = length(level), ncol = length(day)) for (i in 1:length(level)){ for (j in 1:length(day)){ pro[i,j] <- level[i]*day[j] +1 } } # 所有计算完成后再返回结果 return(pro) } # 变量定义 day <- seq(1,7,1) level <- seq(1,5,1) v <- sumpro(day, level) v
运行后输出的矩阵每行对应一个level的pro向量,第一行对应level=1,第二行对应level=2,以此类推。
方案2:R向量化高效写法
无需显式写循环,直接用outer函数实现批量计算,代码更简洁执行效率更高:
day <- seq(1,7,1) level <- seq(1,5,1) pro <- outer(level, day, function(x,y) x*y + 1) pro
输出结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

