当然这是可能的,但我似乎无法找到如何做到这一点:
我希望有一个函数输入的默认值,但是如果它存在于全局环境中,则覆盖默认值和get()一个来自全局环境的变量。如果它不存在于全局环境中,请使用该函数的默认值,该函数中的任何设置为顶级并覆盖它们。
理想情况下,它会像这个非工作函数一样工作:
###Does not work, desired example
myfunc <- function(x=30){
if(exists.in.global.env(x)){x <- get(x)}
###Top level is tough
if(x.is.defined.as.function.input=TRUE ????){x <- x.defined.as.input}
}else{ x <- 30}
return(x)
}
如果我这样做:
myfunc()
[1] 30
但是,如果我创建x,我希望它覆盖函数的默认x = 30并改为采用全局环境值:
x <- 100
myfunc()
[1] 100
但是如果我在函数内部定义了x,那么即使x是全局定义的,我也希望它是顶级的,即覆盖其他所有内容:
x <- 100
myfunc(x=300)
[1] 300
提前致谢!
答案 0 :(得分:18)
您可以修改您的函数以检查x
中是否存在.GlobalEnv
并从中获取它,否则返回默认值。
myfunc <- function(x = 30) {
if ("x" %in% ls(envir = .GlobalEnv)) {
get("x", envir = .GlobalEnv)
} else {
x
}
}
因此,如果"x" %in% ls(envir = .GlobalEnv)
为FALSE
,则会返回
myfunc()
[1] 30
如果找到x
,它将返回它。如果x <- 100
:
myfunc()
[1] 100
在评论后修改
如果您要确保仅在x
未指定x
作为myfunc
的参数时才从全局环境返回missing()
,则可以使用TRUE
。如果未通过x
则返回FALSE
,如果是myfunc <- function(x = 30) {
if ("x" %in% ls(envir = .GlobalEnv) & missing(x)) {
get("x", envir = .GlobalEnv)
} else {
x
}
}
,则返回x <- 100
myfunc(x=300)
[1] 300
:
<start>
<start1>data1</start1>
<start.List>data2</start.List>
</start>
所以对你的例子来说:
[xml]$xmlFile = Get-Content path/to/xmlfile
$xmlFile.start
$xmlfile.start.start1
答案 1 :(得分:3)
最简单的方法是设置适当的默认参数:
myfunc <- function(x=get("x", globalenv())
{
x
}
> x <- 100
> f()
[1] 100
> f(30)
[1] 30
> rm(x)
> f()
Error in get("x", globalenv()) : object 'x' not found