为什么 parent.frame(5)?
Why parent.frame(5)?
谁能帮我算帧数?
我有 load
函数的快捷方式:
loa=function(x,dir='./dados/') {
if(right(dir,1) != '/') dir=paste0(dir,'/')
tryCatch(load(paste0(dir,gsub('\"','',deparse(substitute(x))),'.rda'),envir = parent.frame(1))
,error= function(e) print(e)
,warning= function(e)
load(paste0(dir,x,'.rda'),envir = parent.frame(5))
)
}
在其中,可以放置不带引号的变量名、带引号的变量名或带名称的变量。例如,loa(VALE3)
或 loa('VALE3')
或 var_name='VALE3'; loa(var_name)
有效。
为了让它工作,我不得不把 parent.frame(5)
- 从 1 到 4 不工作。我可以数 .GlobalEnv
、loa
帧、tryCatch
帧,甚至 warning
帧。
其他框架是什么?
P.S。
right=function(x, n)
if(n>0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
与其使用相对父帧,不如直接捕获帧作为函数的开始,然后直接传递它。 (您无法控制运行时创建的帧数 tryCatch
)。
虽然我认为允许字符串或符号名称实际上只是一个危险的混乱,但 R 确实允许。您可以检查传递给函数的承诺的类型,如果它不是字符串,则对其进行解析。最好有两个不同的参数。如果你想传递一个符号,一个,如果你想传递一个字符,另一个。
loa <- function(x, dir='./dados/') {
toenv <- parent.frame()
xn <- substitute(x)
if (!is.character(xn)) xn <- deparse(xn)
if (right(dir,1) != '/') dir <- paste0(dir, '/')
path <- paste0(dir,gsub('\"', '', xn), '.rda')
tryCatch(load(path, envir = toenv),
error = function(e) print(e)
)
}
谁能帮我算帧数?
我有 load
函数的快捷方式:
loa=function(x,dir='./dados/') {
if(right(dir,1) != '/') dir=paste0(dir,'/')
tryCatch(load(paste0(dir,gsub('\"','',deparse(substitute(x))),'.rda'),envir = parent.frame(1))
,error= function(e) print(e)
,warning= function(e)
load(paste0(dir,x,'.rda'),envir = parent.frame(5))
)
}
在其中,可以放置不带引号的变量名、带引号的变量名或带名称的变量。例如,loa(VALE3)
或 loa('VALE3')
或 var_name='VALE3'; loa(var_name)
有效。
为了让它工作,我不得不把 parent.frame(5)
- 从 1 到 4 不工作。我可以数 .GlobalEnv
、loa
帧、tryCatch
帧,甚至 warning
帧。
其他框架是什么?
P.S。
right=function(x, n)
if(n>0) substr(x, (nchar(x)-n+1), nchar(x)) else substr(x, 1, (nchar(x)+n))
与其使用相对父帧,不如直接捕获帧作为函数的开始,然后直接传递它。 (您无法控制运行时创建的帧数 tryCatch
)。
虽然我认为允许字符串或符号名称实际上只是一个危险的混乱,但 R 确实允许。您可以检查传递给函数的承诺的类型,如果它不是字符串,则对其进行解析。最好有两个不同的参数。如果你想传递一个符号,一个,如果你想传递一个字符,另一个。
loa <- function(x, dir='./dados/') {
toenv <- parent.frame()
xn <- substitute(x)
if (!is.character(xn)) xn <- deparse(xn)
if (right(dir,1) != '/') dir <- paste0(dir, '/')
path <- paste0(dir,gsub('\"', '', xn), '.rda')
tryCatch(load(path, envir = toenv),
error = function(e) print(e)
)
}