任何人都可以解释导致代码最后一行错误的原因吗?这是一个错误吗?
> ll <- list(a=1, b=2)
> ee <- as.environment(ll)
> ee
<environment: 0x0000000004d35810>
> ls(ee)
[1] "a" "b"
> with(ee, a)
[1] 1
> with(ee, a - b)
Error in eval(expr, envir, enclos) : could not find function "-"
>
Run Code Online (Sandbox Code Playgroud)
Rei*_*son 15
这是由于R的范围.它需要找到这个功能"-"().你告诉R评估你在环境中的表达ee.那里没有任何功能"-"(),所以继续进行父环境ee,即:
> parent.env(ee)
<environment: R_EmptyEnv>
Run Code Online (Sandbox Code Playgroud)
哪里也没有功能"-"().由于空环境没有父环境
> parent.env(parent.env(ee))
Error in parent.env(parent.env(ee)) : the empty environment has no parent
Run Code Online (Sandbox Code Playgroud)
R放弃了搜索并抛出了一个错误.
我们可以通过将父环境附加到eeR可以找到函数的位置来解决问题:
> parent.env(ee) <- .BaseNamespaceEnv
> with(ee, a - b)
[1] -1
Run Code Online (Sandbox Code Playgroud)
但我认为将父母设定ee为全球环境会更自然:
> parent.env(ee) <- globalenv()
> with(ee, a - b)
[1] -1
Run Code Online (Sandbox Code Playgroud)
a并且b总是会在ee遇到的第一个作用域环境中找到,但是可以在通常的位置查找函数,就好像在命令行中运行它一样.如果您在函数调用中执行此操作,则需要分配正确的环境.
-从您创建的环境中看不到该功能.
如果你在那里分配,
ee$`-` <- `-`
Run Code Online (Sandbox Code Playgroud)
那你的例子就可以了.
| 归档时间: |
|
| 查看次数: |
6610 次 |
| 最近记录: |