小编Dom*_*azz的帖子

宏中的变量范围问题

如果在 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

julia

5
推荐指数
1
解决办法
27
查看次数

R dplyr :: mutate - 在返回的列表中添加所有元素

我有一个返回列表的函数.我正在使用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)

我怎样才能更有效地做到这一点?

r dplyr

4
推荐指数
2
解决办法
604
查看次数

使用proc sql,其中至少有一列是一个值

我怎么写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我想保留所有列,所以我不只是检查一列,我想检查所有列.

sas where-clause proc-sql

3
推荐指数
1
解决办法
132
查看次数

标签 统计

dplyr ×1

julia ×1

proc-sql ×1

r ×1

sas ×1

where-clause ×1