R'对象XX未找到'错误抛出函数内部,但不在脚本中

时间:2013-05-21 17:12:26

标签: r scope

我对R来说相当新,所以如果这个问题有点傻话,我很抱歉。

我在外部包中调用函数('mmlcr',虽然我不认为这与我的问题直接相关),并且所需的输入(数据)之一是data.frame。我使用以下方法(简化说明)从各种数据中组合data.frame:

    #id, Time, and value are vectors created elsewhere in the code.
    myData = data.frame(a=id, b=Time, c=value)  
    out <- mmlcr( input1, input2, data=myData, input4)

引发错误:

Error in is.data.frame(data) : object 'myData' not found

调试器指示在mmlcr()调用期间抛出此错误。

然后我在mmlcr()调用之前立即添加了一个print(ls()),输出确认“myData”在我的函数工作区中;进一步is.d​​ata.frame(myData)返回TRUE。所以似乎“myData”成功创建,但由于某种原因它没有正确地传入mmlcr()函数。 (注释这一行不会导致抛出错误,所以我很确定这是有问题的一行。)

然而,当我在脚本中放入完全相同的代码(即,不在功能块内)时,不会抛出此类错误并且输出符合预期。因此,我认为存在一些范围问题。

我尝试了两种分配方法:

myData = data.frame(a=id, b=Time, c=value)  
myData <- data.frame(a=id, b=Time, c=value)  

并且都给了我同样的错误。我承认我并不完全理解R中的范围模型(我已经读过关于=和&lt; - 之间的差异而我认为我得到它,但我不确定)。

您可以提供任何建议。

1 个答案:

答案 0 :(得分:1)

MMLCR现已弃用,您应该搜索一些替代方案。我没有太多关注它,我穿过一个旧的回购,找到了罪魁祸首:

m <- eval(m, data)

在函数mmlcr.default中。造成这种情况的原因有很多,但范围很大。 R在subset.data.frame函数中遇到此问题,请参阅我的old SO question。我没有修改源代码,而是使用forrepeatwhile循环找到了使用子例程执行函数的方法。