我已经编写了一个函数,并试图将其传递给lapply以针对数据帧中的每一行运行

时间:2019-06-05 17:07:23

标签: r lapply

我的代码在下面

    myfunction = function (D)
{

  if( unique( commonData[ , FLAG] ) == "Yes" )
  {
    D[,'YD_Yes'][rownum ] <- commonData[commonData[ , FLAG ] == "Yes", "STRS" ] ;
    D[,'PD_Yes'][ rownum ] <- commonData[ commonData[ , FLAG ] == "Yes", "VAL" ];
  }  else if (unique(commonData[, FLAG]) == "No")
  {
    D[,'YD_Pure_Wasted'][[ rownum ]] <- commonData[commonData[ , FLAG ] == "Pure_No", "STRS" ] ;
    D[,'PD_Pure_Wasted'][[ rownum ]] <- commonData[commonData[ , FLAG ] == "Pure_No", "VAL" ] ;
  } else {
   D[,'YD_Repeated_Wasted'][[ rownum ]] <- commonData[commonData[ , FLAG ] == "Repeated_No", "STRS" ] ;
   D[,'PD_Repeated_Wasted'][[ rownum ]] <- commonData[commonData[ , FLAG ] == "Repeated_No", "VAL" ] ;
   }

    temp = lapply(myfunction, mydataframe)

我希望函数中的计算能够执行。但是错误消息是:

Error in `[.default`(`*tmp*`, "YD_Yes") : 
  incorrect number of dimensions

1 个答案:

答案 0 :(得分:0)

首先,欢迎来到SO。

现在,关于您的问题:正如“罗希特”所说,l强不是解决问题的正确方法。您应该改用Apply。

但是您的代码中还有另一个问题(不完全是问题,而是代码难闻的气味),它们是您在函数中使用的变量:rownum,commonData和FLAG。它们超出了范围变量,很难跟踪它们。

因此,首先在您的函数中声明它们:

myFunction = function(D, rownum, commonData, FLAG) {
    # your function code
}

它们使用apply来迭代“ myFunction”中的每一行:

apply(D, 1, rownum, commonData, FLAG)

第一个应用参数是要迭代的数据(第一个函数参数),最后三个参数是其余的函数参数。

但是请记住:在提出问题之前,请尝试创建一个可复制的示例,以便我们可以更快地为您提供帮助。