任何人都可以帮我计算相框吗?
我有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))
答案 0 :(得分:1)
不是使用相对父帧,而是直接捕获帧作为函数的开始然后直接传递它。 (您无法控制运行时创建的帧数tryCatch
。)
虽然我认为允许字符串或符号名称实际上只是一个危险的混乱,但R确实允许它。您可以检查传递给函数的promise的类型,如果它不是字符串,则将其解析。有两个不同的参数会更好。一个如果你想传递一个符号,另一个如果你想传递一个角色。
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)
)
}