如何將列作為公式中的參數傳遞你好,
我正在嘗試在作為變量存儲在列表中的列上創建一個簡單的公式。
我不明白為什麼 JSL 拒絕執行公式。
如果我通過它存儲的 hte 字符串更改公式中的參數,它會完美運行。
有幫助嗎??
這是我使用的代碼:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
for(j=1, j <= N items(MyList), j++,
dt << New Column( ParamPlot[j], Formula( 2* ParamPlot[j]) );
);
我試過 Eval、Eval expr 之類的東西,...但現在 
Re: 如何在公式中將列作為參數傳遞簡短而有效:)
非常感謝 :)
Re: 如何在公式中將列作為參數傳遞我無法抗拒最後一次拍攝。 簡短而甜美,而且有效。 利用評估插入評估變量, :名稱()引用列, “\[]\”允許在字符串中使用雙引號,最後使用評估(解析())運行結果字符串。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
new_col_expr = evalinsert("\[dt << New Column("^paramplot[j]^", Formula(2 * :name("^mylist[j]^")))]\");
eval(parse(new_col_expr));
);Re: 如何在公式中將列作為參數傳遞首先謝謝大家的回答。。。
以下是我對所有提出的解決方案的看法:
1/ Mark 提出的解決方案:完美運行(儘管在不用於 Eval、parse、Substitue 等時難以閱讀)。
2/ Jan 提出的解決方案:確實,在眼中更好(也使用 eval、substituteinto、...)。 順便說一句,它工作得很好。
3/ Byron 的解決方案:也使用 Eval、substitute、expr...完美工作
4/ pmroz 的解決方案是迄今為止最簡單的(對眼睛而言),但我們得到的公式仍然引用 MyList 而不是它們應該代表的列......這意味著如果我更改“年齡”列中的值”,列“age2”將不會更新。
謝謝大家的建議:)
Re: 如何在公式中將列作為參數傳遞正如拜倫所說,您正在嘗試創建一個本身是其 2 倍的新列。 我想這就是你想要的。 AS COLUMN 成功了。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
dt << New Column( ParamPlot[j], Formula( 2 * as column(dt, MyList[j]) ) )
);
只要您不添加行,這就很好用。 然後你需要 evals,exprs 等。
Re: 如何在公式中將列作為參數傳遞看起來您正在嘗試製作一個將自身乘以 2 的公式。這將不起作用,應該返回一個空值。
此外,“j”是一個用於製作矩陣的函數(請注意,它在 JSL 編輯器中變為藍色)所以我通常避免使用“j”作為變量,以防它可能以意想不到的方式被插入。
使用列名和引用可能會非常令人沮喪。 看看這個策略。
在循環內部,首先創建該列,並在創建時為其提供一個句柄“newcol”以用作參考。 接下來是大 eval(substitute)) 子句。 在這個參數中,“col<
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( i = 1, i <= N Items( MyList ), i++,
newcol=dt << New Column( ParamPlot[i] );
Eval(
Substitute(
Expr(
newcol << set formula( a * 2 ) ) ,
Expr( a ), As Name( mylist[i] )
);
));Re: 如何在公式中將列作為參數傳遞也許這稍微好一點(在某些人看來):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
CMD = Expr(dt << New Column( NameTBD, Formula( 2 * colTBD) ));
SubstituteInto(CMD, Expr(NameTBD), ParamPlot[j], Expr(ColTBD), Parse(":"||MyList[j]));
CMD;
);
Re: 如何在公式中將列作為參數傳遞問題在於 Formula() 的參數被視為文字表達式。 它不會評估 ParamPlot[j] 並用結果代替您想要的公式。 看起來你應該能夠使用表達式,但我對這種方法一無所知,所以這裡有一個基於字符串的解決方案:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
MyList = {"age", "height"};
ParamPlot = {"age2", "height2"};
For( j = 1, j <= N Items( MyList ), j++,
Eval(
Parse(
Substitute("dt << New Column( \!"nnn\!", Formula( 2 * :ppp ) )",
"nnn",
ParamPlot[j],
"ppp",
MyList[j]
)
);
);
);
我真的不喜歡使用字符串,但有時,你必須做你必須做的事情。