为了账号安全,请及时绑定邮箱和手机立即绑定

R强制本地范围

R强制本地范围

紫衣仙女 2019-11-13 15:49:56
这可能是不正确的术语,但希望我能阐明我的观点。我经常会做类似的事情:myVar = 1f <- function(myvar) { return(myVar); }# f(2) = 1 nowR高兴地使用了函数范围之外的变量,这让我抓狂了,想知道如何获得结果。是否有任何选项说“强迫我仅使用该函数范围内先前已分配值的变量”?use strict例如,Perl就是这样做的。但我不知道R等于my。编辑:谢谢,我知道我以不同的方式大写了它们。实际上,该示例是专门为说明此问题而创建的!我想知道在执行此操作时R是否可以自动警告我。编辑2:另外,如果Rkward或其他IDE提供此功能,我也想知道。
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

checkUsage在codetools包是有帮助的,但不会让你一路都有。在myVar未定义的干净会话中,


f <- function(myvar) { return(myVar); }

codetools::checkUsage(f)


<anonymous>: no visible binding for global variable ‘myVar’

但是一旦定义好myVar,checkUsage就会很高兴。


?codetools在codetools包装中看到:有可能有用的东西:


> findGlobals(f)

[1] "{"      "myVar"  "return"

> findLocals(f)

character(0)


查看完整回答
反对 回复 2019-11-13
?
达令说

TA贡献1821条经验 获得超6个赞

使用get(x, inherits=FALSE)将强制本地范围。


 myVar = 1


 f2 <- function(myvar) get("myVar", inherits=FALSE)



f3 <- function(myvar){

 myVar <- myvar

 get("myVar", inherits=FALSE)

}

输出:


> f2(8)    

Error in get("myVar", inherits = FALSE) : object 'myVar' not found

> f3(8)

[1] 8


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 551 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信