您好,我正在编写一个脚本来自动执行表格操作(主要是使用匹配公式添加新列),数据具有可变数量的唯一列内容和最终输出。
我编写了一个脚本来识别 :SampleID(保存在 Init_IDs 中)中的唯一内容,并提示用户在弹出窗口中重命名这些内容,并将重命名后的内容保存在 New_IDs 中。然后,我可以使用标准的匹配公式创建新列:
New Column( "Sample",
Character,
Nominal,
Formula(
Match( :SampleID,
"C1", "Constant 1",
"C2", "Constant 2",
Init_IDs[1], New_IDs[1],
Init_IDs[2], New_IDs[2],
Init_IDs[3], New_IDs[3],
Init_IDs[4], New_IDs[4],
Init_IDs[5], New_IDs[5],
Init_IDs[6], New_IDs[6],
)
)
);
这个公式在我的测试数据集上有效,当时 New_IDs 的大小为 6,但这个大小会变化,所以我希望使用 For 循环来使其更灵活。以下是我尝试过的方法,但它不起作用:
New Column( "Sample",
Character,
Nominal,
Formula(
Match( :SampleID,
"C1", "Constant 1",
"C2", "Constant 2",
) +
For( i = 1, i <= N Items( New_IDs ), i++,
Match( :SampleID,
Init_IDs[i], New_IDs[i],
)
)
),
);
我已经检查过,N 个项目(New_ID)生成的值为 6。我尝试单独使用 For 循环,不与其他 MATCH 公式结合使用,但也不奏效。因此,虽然中间的“+”号最终可能是一个问题,但主要问题似乎出在我的 for 循环本身。
我还尝试用 If 语句代替 MATCH 公式来简化它,但仍然不行:
New Column( "Sample",
Character,
Nominal,
Formula(
For( i = 1, i <= 6, i++,
If( :SampleID == Init_IDs[i],
New_IDs[i]
)
)
)
);