R强制本地范围

这可能是不正确的术语,但希望我能阐明我的观点。


我经常会做类似的事情:


myVar = 1

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

# f(2) = 1 now

R高兴地使用了函数范围之外的变量,这让我抓狂了,想知道如何获得结果。


是否有任何选项说“强迫我仅使用该函数范围内先前已分配值的变量”?use strict例如,Perl就是这样做的。但我不知道R等于my。


编辑:谢谢,我知道我以不同的方式大写了它们。实际上,该示例是专门为说明此问题而创建的!


我想知道在执行此操作时R是否可以自动警告我。


编辑2:另外,如果Rkward或其他IDE提供此功能,我也想知道。


紫衣仙女
浏览 557回答 3
3回答

白衣非少年

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] "{"&nbsp; &nbsp; &nbsp; "myVar"&nbsp; "return"> findLocals(f)character(0)

达令说

使用get(x, inherits=FALSE)将强制本地范围。&nbsp;myVar = 1&nbsp;f2 <- function(myvar) get("myVar", inherits=FALSE)f3 <- function(myvar){&nbsp;myVar <- myvar&nbsp;get("myVar", inherits=FALSE)}输出:> f2(8)&nbsp; &nbsp;&nbsp;Error in get("myVar", inherits = FALSE) : object 'myVar' not found> f3(8)[1] 8
打开App,查看更多内容
随时随地看视频慕课网APP