如果在 main 中定义,我有一个宏可以工作。
macro check_set(d,v)
nm = string(v)
quote
global $v
if haskey($d,$nm)
$v = $d[$nm]
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我将它放在一个模块中(在模块内部定义的宏)以在函数中使用(也在模块内部定义)时,我会遇到范围问题。
export setVars
function setVars(val::Dict)
global max_iter
@check_set val max_iter
end
Run Code Online (Sandbox Code Playgroud)
在 main 中,我按预期调用setVars(config)whereconfig是一本字典。我得到:
错误:UndefVarError:val 未定义
添加@macroexpand我看到:
begin
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:156 =#
global max_iter
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:157 =#
if Stuff.haskey(Stuff.val, "max_iter")
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:158 =#
Stuff.max_iter = Stuff.val["max_iter"]
end
end
Run Code Online (Sandbox Code Playgroud)
所以 ERROR 是有道理的,它正在寻找Stuff.val何时val局部作用于函数。
我如何让它寻找本地范围的val?
我有一个返回列表的函数.我正在使用mutate在与输出对应的数据框中添加列.计算相当复杂,所以我宁愿只调用一次函数.我对R和dplry很新,并且无法找到一种更有效的方法.
这是我现在正在做的一个非常简单的例子.
library(dplyr)
testFun <- function(x,z)
{
list(x2=x*x + z, x3=x*x*x + z)
}
have <- data.frame(x=seq(1:10),y=1,z=0)
want <- have %>%
dplyr::mutate(x2=testFun(x,z)$x2,
x3=testFun(x,z)$x3)
Run Code Online (Sandbox Code Playgroud)
我怎样才能更有效地做到这一点?
我怎么写sas:
proc sql;
create table THIS as
select *
from MAIN(keep=id col1 -- col34)
where (AT LEAST ONE OF THE COLUMNS contains 1) ;
;
Run Code Online (Sandbox Code Playgroud)
我有一个问题,弄清楚如何写最后一行bc我想保留所有列,所以我不只是检查一列,我想检查所有列.