열 참조가 누락되었을 가능성이 있는 경우 수식을 작성하는 가장 좋은 방법객체의 내용을 기반으로 수식을 생성하는 스크립트가 있습니다. 어떤 경우에는 객체를 채우는 항목이 생략됩니다. 예를 들어, N Items(yVars) == 0인 경우입니다. 열 참조가 비어 있을 때 해당 열 참조 없이 수식을 계산하려면 어떻게 해야 할까요?
아래 예시는 항목의 존재 여부를 확인하고 if() 문을 사용하여 여러 대안적인 동작을 생성하는 등 지나치게 복잡한 경우입니다.
If( N Items( yVars ) == 0,
Data Table( "HIRP" ) << New Column( "Average PTC",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Col Mean(
Col Maximum( :Power, :Heater, :HD_NUM ),
:Heater,
:WAFER_SUBSTRATE_LOT_ID_IDX
)
)
),
Eval(
Eval Expr(
Data Table( "HIRP" ) << New Column( "Average PTC",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Col Mean(
Col Maximum( :Power, :Heater, :HD_NUM ),
:Heater,
Expr(
Name Expr( As Column( Divider ) )
)
)
)
)
)
)
);
자동화 및 스크립팅제목: 열 참조가 누락되었을 가능성이 있는 경우 수식을 작성하는 가장 좋은 방법한 가지 방법은 다음과 같습니다.
//first a table to add columns to
Names default to here(1);
dt = New Table( "Test Table",
Add Rows( 2 ),
New Column( "a", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2] ) )
);
//this one does create a column
if(!Contains(dt << get column names("string"), "b"),
dt << New Column( "b", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [3, 4] ) )
);
//this does not since b already exists
if(!Contains(dt << get column names("string"), "b"),
dt << New Column( "b", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [5, 6] ) )
);
제목: 열 참조가 누락되었을 가능성이 있는 경우 수식을 작성하는 가장 좋은 방법현재 하고 있는 방식을 피해야 할 특별한 이유가 있나요? 열 참조가 비어 있으면 수식에 추가하지 마세요.
당신이 제시한 방법은 전혀 복잡하지 않고 읽고 이해하기 쉽습니다. if 문을 사용하여 수식을 설정하면 반복을 약간 줄일 수 있습니다. (질문을 제대로 이해했다면) 저는 이 방법이나 당신이 제시한 방법 모두 사용할 것 같습니다.
Names Default To Here(1);
// myvar = 1;
dt = Open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("Test", Numeric, Continuous);
If(Is Missing(myvar),
newcol << Set Formula(
:height/:weight
);
,
newcol << Set Formula(
:weight/:height
)
);
읽기, 이해하기, 디버깅하기가 더 어려울 수 있는 몇 가지 옵션은 다음과 같습니다.
if 문 안에 수식 표현식을 만든 다음 수식을 설정할 수 있습니다.
Names Default To Here(1);
myvar = 1;
dt = Open("$SAMPLE_DATA/Big Class.jmp");
fexpr = If(Is Missing(myvar), Name Expr(:height/:weight), Name Expr(:weight/:height));
Eval(EvalExpr(
newcol = dt << New Column("Test", Numeric, Continuous, Formula(
Expr(NameExpr(fexpr))
))
));
또는 수식 평가 내부에 if 문을 사용할 수도 있습니다(제 생각에는 불필요하게 복잡합니다).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("Test", Numeric, Continuous);
Eval(Substitute(
Expr(newcol << Set Formula(
_fexpr_
)),
Expr(_fexpr_), If(Is Missing(myvar), Name Expr(:height/:weight), Name Expr(:weight/:height))
));
제목: 열 참조가 누락되었을 가능성이 있는 경우 수식을 작성하는 가장 좋은 방법제가 현재 방식에 대해 가장 불만스러운 점은 코드가 너무 비효율적이라는 것입니다. 동일한 코드가 간헐적 열을 포함하는 버전과 포함하지 않는 버전으로 두 번 반복됩니다. 이러한 불일치를 처리하기 위해 `try()` 문과 같은 기능이 있었으면 좋았을 것 같습니다. 그런 기능이 있다면 편집 과정도 훨씬 간편해질 것입니다.
제목: 열 참조가 누락되었을 가능성이 있는 경우 수식을 작성하는 가장 좋은 방법수식 내에서 열 참조가 누락된 경우를 처리하는 방법은 사실상 없습니다(Try()를 사용할 수도 있지만, 수식 실행 속도가 매우 느려질 가능성이 높으므로 권장하지 않습니다). 복제를 피하기 위한 몇 가지 옵션을 제시해 드렸습니다. 열을 생성하거나 수식을 추가하는 함수를 만드는 방법도 있습니다.