You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中for循环获取动态生成变量值 paste生成列名取数问题求助

问题根因

R中$运算符不支持直接传入字符串格式的列名,当你传入带引号的字符串时,R会将引号识别为列名的一部分,无法匹配到实际不带引号的列。如果你的数据是tibble类型,使用[行,列]索引时默认返回单列表格而非向量,也会导致后续计算异常。

解决方案

动态列名读取改用[[运算符,或者在方括号索引中加drop=TRUE将结果转为向量即可,两种写法示例如下:

  • 双中括号写法(推荐,同时适配data.frame和tibble类型):
    CurColumn <- mydata2[[paste0("Columns",i)]][row]
  • 方括号加drop参数写法:
    CurColumn <- mydata2[row, paste0("Columns",i), drop=TRUE]

原有代码其他问题修正

你的代码还存在两处逻辑错误,会导致最终结果不符合预期:

  1. 内外层循环都使用了变量i,内层循环会覆盖外层的i值,导致逻辑混乱,建议将内层循环变量改为其他名称如k
  2. 当前mydata2$T1 <- CurColumn的写法会把整个T1列都赋值为当前行计算出的结果,需要修改为按行赋值,仅修改当前行的T1、T2值

修正后完整代码

mydata2 <- mydata1 # 修正原代码的拼写错误maydata1
x <- 10
alpha <- 0.63
beta <- 0.2

# 补充逐行遍历数据框的外层循环
for (row in 1:nrow(mydata2)) {
  for (i in 1:x) {
    j <- i + 1
    # 内层循环变量改为k,避免覆盖外层i
    for (k in 1:j) {
      CurColumn  <- mydata2[[paste0("Columns",k)]][row]
      NextColumn <- mydata2[[paste0("Columns",j)]][row]
      DiffColumn <- NextColumn - CurColumn
      if ( (CurColumn <= alpha & alpha <= NextColumn) | ( DiffColumn < beta)) {
        # 按行赋值,避免覆盖整列数据
        mydata2$T1[row] <- CurColumn
        mydata2$T2[row] <- NextColumn
        CurActParams  <- mydata2[[paste0("AP",k)]][row]
        NextActParams <- mydata2[[paste0("AP",j)]][row]
        break
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者Zakir Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:15:04