使用 JSL 構建表,“新列”問題你好,
我正在嘗試使用文件的第一行數據確定數據類型,從數據文件在 JSL 中構建一個表。但是,我無法在腳本中使用數字以外的類型創建新列。這有效:
dt << New Column("test", Character, Nominal)但是,此(簡化示例)僅生成數字列:
cols = {"A", "B", "C"};
type = {};
For(i = 1, i <= N Items(cols), i = i + 1,
type[i] = Match(cols[i],
"A", Expr(Character),
Expr(Numeric);
);
);
For(i = 1, i <= N Items(cols), i = i + 1,
dt << New Column(cols[i], Eval(type[i]), Nominal);
);預期的行為是創建一個字符列和兩個數字列。是什麼導致表達式 type[i] 在這裡被忽略?
回复:使用 JSL 構建表,“新列”問題有用! 擴展這個你可以做
Eval(
Substitute(
Expr(dt << New Column(__cols__, __type__, ...)),
Expr(__cols__), cols[i],
Expr(__type__), type[i],
...
);
);
謝謝!
回复:使用 JSL 構建表,“新列”問題New Column() 函數中的某些項目在解析時不會被評估,因此要求它們在處理時是完整的 JSL 語句。Substitute() 函數允許這樣做。這是我用來做你正在做的事情的代碼:
dt = New Table( "Example" );
cols = {"A", "B", "C"};
type = {};
For( i = 1, i <= N Items( cols ), i = i + 1,
Eval(
Substitute(
Expr(
dt << New Column( cols[i], __type__, Nominal )
),
Expr( __type__ ), Match( cols[i], "A", Expr( Character ), Expr( Numeric ) )
)
)
);