【问题标题】:Programming error "argument is of length zero" %in%编程错误“参数长度为零”%in%
【发布时间】:2014-04-03 15:27:26
【问题描述】:

我在第一个“%in%”语句中收到连续错误。我检查了其他“长度为零的参数”答案,但没有看到任何适用的答案。

仅测试 data$var[1] %in% Group1Zips 在 R 控制台中返回 FALSE,所以除了返回的 NULL 值之外,我肯定遗漏了一些东西。

任何帮助将不胜感激。

    NewColumn= vector() 
    builder = function(data, TRXVAR, ZIPVAR){

    Group1 <- 0
    Group1Zips = vector()
    Group2 <- 0
    Group2Zips = vector()
    Group3 <- 0
    Group3Zips = vector()
    Group4 <- 0 
    Group4Zips = vector()
    Group5 <- 0 
    Group5Zips = vector()
    for (i in 1:nrow(data)){
    if (data$ZIPVAR[i] %in% Group1Zips){
    Group1 = Group1 + TRXVAR[i]
    append(NewColumn,"Group1")
    break }
      else if (data[i, ZIPVAR] %in% Group2Zips){
    Group2 = Group1 + data[i, TRXVAR]
    append(NewColumn, "Group2")
    break
  }
  else if (data[i, ZIPVAR] %in% Group3Zips){
    Group3 = Group3 + data[i, TRXVAR]
    append(NewColumn, "Group3")
    break
  }
  else if (data[i, ZIPVAR] %in% Group4Zips){
    Group4 = Group4 + data[i, TRXVAR]
    append(NewColumn, "Group4")
    break
  }
  else if (data[i, ZIPVAR] %in% Group5Zips){
    Group5 = Group5 + data[i, TRXVAR]
    append(NewColumn, "Group5")
    break
  }
  else if (Group1 < Group2){
    Group1 = Group1 + data[i, TRXVAR] 
    append(Group1Zips, data[i, ZIPVAR])
    append(NewColumn, "Group1")
    break
  }
  else if (Group2 < Group3){
    Group2 = Group2 + data[i, TRXVAR]
    append(Group2Zips, data[i, ZIPVAR])
    append(NewColumn, "Group2")
    break
    }
  else if (Group3 < Group4){
    Group3 = Group3 + data[i, TRXVAR]
    append(Group3Zips, data[i, ZIPVAR])
    append(NewColumn, "Group3")
    break
    }
  else if (Group4 < Group5){
    Group4 = Group4 + data[i, TRXVAR]
    append(Group4Zips, data[i, ZIPVAR])
    append(NewColumn, "Group4")
    break
    }
   else if (Group5 < Group1){
    Group5 = Group5 + data[i, TRXVAR]
    append(Group5Zips, data[i, ZIPVAR])
    append(NewColumn, "Group5")
    break
    }
  else {
    Group1 = Group1 + data[i, TRXVAR]
    append(Group1Zips, data[i, ZIPVAR])
    append(NewColumn, "Group1")
  }
 }
 return(nrow(NewColumn))
}

编辑**

以下是数据示例:

    PROVIDER.ID ZIP TRX_ALL SPEC_CODE   
    2432188006  10013   4331    NEP 
    0050676082  90012   3050    IM  
    4954985007  77479   3043    CD  
    0250771087  90031   3020    OPH 

【问题讨论】:

  • 它返回了FALSE。它正在做它的工作。 Group1Zips 是一个空向量。
  • 请让您的示例可重现,我们没有您的数据。
  • 也就是说,请发布一些数据并提示我们您正在尝试做什么。
  • 抱歉:每一行代表一个销售账户。数据包括 ZIP 中的邮政编码,以及 TRX_ALL 中的总脚本(我在药店)的整数数量。我这样做的目的是自动将帐户分成五个组,每个组都有关于脚本

标签: r


【解决方案1】:

您的代码在某处缺少“}”,我认为您没有提供足够的数据来重现这一点,但它看起来很像您的 if 语句应该是:

if(data[i, ZIPVAR] %in% Group1Zips){

您编写它的方式是在您提供的任何对象中查找名为“ZIPVAR”的列,而不是查找以 ZIPVAR 值命名的列。

【讨论】:

  • 这是我的数据框的示例:
  • data[i, columnName] 的格式看起来有助于通过该特定错误。我仍然没有它工作,但当我这样做时会在这里发布。感谢您的帮助。
  • 那么,data[i, ZIPVAR] 是在告诉它查看数据帧的“i”行和“ZIPVAR”列吗?我应该将“dataframe$ZIPVAR”作为变量传递还是只传递“ZIPVAR”?
  • 如果 i &lt;- 3ZIPVAR &lt;- "var" 然后 data[i, ZIPVAR] 等效于 data[3, "var"]data$var[3] 所以在这种情况下,您应该将列的名称(或编号)传递给函数作为 ZIPVAR。您可以重写 if 语句以接受 dataframe$ZIPVAR 样式的输入。
  • @ping,您自己可能遗漏了括号。 if (( 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2018-05-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
相关资源
最近更新 更多