For 迴圈未如預期運作你好,
我有兩個非常令人困惑的問題。
1 ) 對於下面的簡單 for 循環,我有 3 個滿足單一輸出的條件。我透過手動檢視和繪圖驗證了所有 8 種組合確實存在於數據中。然而,這卻是不平衡的,只有 x1、x2 和 x3 會填入 X1 列中的所有儲存格中。例如,條目 x2 將分配給它雙倍的條目數。透過子集進一步檢查,x2 和 x4 確實滿足 A1、B1 和 C1 列,這將是平等的。所有列共享相同的資料和建模類型。
我還封鎖了收集雙倍條目的條目,只是為了看看會發生什麼。例如,然後將條目捆綁為 x2。
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2";
);
);
2) 如果我透過使用 & 為單元格賦值來縮短程式碼,則會收到錯誤「嘗試指派給不是 L 值的物件」。這是嘗試縮短我的程式碼並且不具有多個不同的循環。下面是 3 個標準和 3 個輸出的範例。
For( i = 1, i <= N Rows ( dt ), i++,
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2";
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1";
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1";
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2";
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3";
);
);
任何指導將不勝感激。感謝您的提前幫助!
品質和工藝工程回复:For循環沒有按預期工作我還確保在代碼中正確調用了列名,並且在行尾嘗試了逗號和分號。 我已將代碼分成更小的塊,將 A1 列中的可能值分成不同的 for 循環,但我有同樣的問題。
回复:For循環沒有按預期工作你好@StarfruitBob ,
你很近...
的語法如果函數是如果(條件 1,結果 1,條件 2,結果 2,否則結果)。
因此,通過用逗號替換結尾的分號來修改您的語句:
For( i = 1, i <= N Rows ( dt ), i++,
If(
// condition 1 = :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1"
// result 1 = :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2"
,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y2" & :Z1[i] = "z1"
,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y4" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1", :X1[i] = "x3" & :Y1[i] = "y1" & :Z1[i] = "z1"
,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2", :X1[i] = "x4" & :Y1[i] = "y2" & :Z1[i] = "z4"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1", :X1[i] = "x1" & :Y1[i] = "y4" & :Z1[i] = "z2"
,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2", :X1[i] = "x2" & :Y1[i] = "y3" & :Z1[i] = "z3"
);
);
HTH。
乾杯,
斯坦
回复:For循環沒有按預期工作你好,斯坦,
感謝您的快速回复!這是我已經試驗過的東西,例如,將填充 x1、x2 和 x3,而不是填充 x1、x2 和 x4。
這也發生在多個輸出上,例如 X1 和 Y1 列。
回复:For循環沒有按預期工作是的,請確保您使用 Stan 建議的逗號。 如果秘密
編輯:我想你想要
If( :A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a1" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x2" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a1" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c1" , :X1[i] = "x3" ,
:A1[i] == "a2" & :B1[i] == "b1" & :C1[i] == "c2" , :X1[i] = "x4" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c1" , :X1[i] = "x1" ,
:A1[i] == "a2" & :B1[i] == "b2" & :C1[i] == "c2" , :X1[i] = "x2" ,
throw("Nothing matched!") // this is the otherwise case
);
如果您真的想要多個作業,請使用 ;而不是 &
:X1[i] = "x1" & :Y1[i] = "y1" & :Z1[i] = "z2" // change this
:X1[i] = "x1"; :Y1[i] = "y1"; :Z1[i] = "z2"; // to this
雖然它可能與 & 一起工作,但它非常脆弱,下一個人很難解開謎題。 正如你所說,編譯器看到
a=1 & b=2
作為
a = ( ( 1 & b ) = 2 )
產生 L 值消息。 如果錯誤消息不是程序員所代表的,那就太好了我無法將 = 右側的值 2 存儲到 = 左側的“1 & b”中,因為“1 & b”不是變量名.
實際上,編譯器在 a=1 & b=2 的情況下做得相當不錯:
試圖在訪問或評估 'Assign' 時分配給不是 L 值的對象,1 & b = /*###*/2 /*###*/
回复:For循環沒有按預期工作這實際上是我在這一切中的第二次嘗試,週末我又回來了,它奏效了。我沒有解釋為什麼我第一次像這樣嘗試它時它不起作用。謝謝您的答复!