3

我对 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.data.frame(myData) 返回 TRUE。因此,似乎“myData”已成功创建,但由于某种原因,它没有正确传递到 mmlcr() 函数中。(评论此行不会引发任何错误,因此我很确定这是有问题的行)。

但是,当我将完全相同的代码放入脚本中(即,不在功能块中)时,不会引发此类错误,并且输出符合预期。因此,我认为会出现一些范围界定问题。

我尝试了两种分配方法:

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

两者都给了我同样的错误。我承认我并不完全理解 R 中的范围模型(我已经阅读了 = 和 <- 之间的区别,我我明白了,但我不确定)。

您可以提供的任何建议将不胜感激。

4

1 回答 1

1

MMLCR 现在已弃用,您应该寻找一些替代方案。没有过多地研究它,我通过一个旧的 repo 进行了调查,并找到了罪魁祸首:

m <- eval(m, data)

在函数中mmlcr.default。这不好的原因有很多,但范围界定是最重要的。R 的功能有这个问题subset.data.frame,请参阅我的旧 SO 问题。而不是修改源代码,我会找到一种方法来使用子例程使用 、 或循环来执行您forrepeat函数while

于 2013-05-21T18:53:17.867 回答