R语言for循环如何动态赋值变量并更新数据框避免重复采样
问题解决方法
你当前需要实现动态读取每次循环生成的p_i变量值来过滤数据框,共有两种可行方案:
方案1:直接适配现有写法
你可以用get()函数根据变量名字符串读取对应变量的值,直接替换原有代码里的x即可,修改后的循环代码如下:
for(i in pick_list) { assign(paste0('p_',i),sample(df[1:5,3], 1, replace = FALSE, prob = NULL)) # get()可直接获取动态生成的p_i变量的值 df <- df[!(df$PLAYER.NAME == get(paste0('p_',i))),] }
注意:当前你采样时取的是df前5行的第3列,建议确认第3列就是PLAYER.NAME列,否则会出现匹配失败无法正常去重的问题,直接写df$PLAYER.NAME代替df[1:5,3]稳妥性更高。
方案2:更适合新手的简化写法
不推荐用assign生成大量独立的p_1到p_150变量,既难管理又冗余,你可以直接用一个向量存储所有选中的选手名,代码更简洁好维护:
# 初始化向量存储所有选中的选手 picked_players <- c() for(i in pick_list) { # 直接把当前选中的选手存到变量中,不需要单独生成p_i变量 current_pick <- sample(df[1:5,3], 1, replace = FALSE, prob = NULL) picked_players[i] <- current_pick # 直接用当前选中的选手名过滤数据框 df <- df[!(df$PLAYER.NAME == current_pick),] }
后续需要调取第n个顺位的选中结果时,直接调用picked_players[n]即可,比单独查找p_n变量更方便。
内容的提问来源于stack exchange,提问作者Mike Feeney
相关产品推荐
相关产品推荐

