修改R语言自定义InitilzePop函数:从指定向量取值替代随机生成
解决R语言InitilzePop函数修改需求
修改后的完整代码
Gems <- data.frame( Color = c("Red", "Blue", "Purple", "Orange", "Green", "Pink", "White", "Black", "Yellow"), Weight = round(runif(9,0.5,5),2), Value = round(abs(rnorm(9,0,5))+0.5,2) ) InitilzePop <- function(size){ # 计算需要提取的元素总数 elem_num <- size * nrow(Gems) # 提取前elem_num个元素 selected <- head(myvector, elem_num) # 转换为每行nrow(Gems)个元素的矩阵 pop <- matrix(selected, nrow = size, ncol = nrow(Gems), byrow = TRUE) # 设置列名 colnames(pop) <- Gems$Color # 更新全局环境中的myvector,移除已使用的元素 myvector <<- tail(myvector, length(myvector) - elem_num) return(pop) }
关键说明
- 按顺序提取
myvector的前size * nrow(Gems)个元素,完全符合要求且未使用base::sample() - 用
matrix()的byrow = TRUE参数保证每行对应Gems的行数元素,和原函数输出结构一致 - 使用
<<-修改全局环境中的myvector,确保每次调用后该向量自动缩短为剩余未使用元素 - 保留原函数的列名设置逻辑,保证输出矩阵的可读性
使用示例
# 初始化一个足够长的myvector示例 myvector <- rep(c(0,1), 15) # 第一次调用,生成2行的矩阵 pop1 <- InitilzePop(2) print(pop1) # 查看剩余的myvector print(myvector) # 第二次调用,生成1行的矩阵 pop2 <- InitilzePop(1) print(pop2) # 再次查看剩余的myvector print(myvector)
内容的提问来源于stack exchange,提问作者user10075864
相关产品推荐
相关产品推荐

