错误:“表达式不适合可用的列类型”<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
在下面的代码中,我收到错误:“表达式不适合可用的列类型”,并且它发生在公式评估期间。
我只是想在添加新列时引用同一个表,例如减去我要添加新列的表中名为“dt”的两列... 不明白为什么它不起作用。
dt = myTable();
cols = dt << GetColumnNames("字符串");
//等待(3);
For(c=1, c<=NItems(cols), c++,
如果( 开始于(列,“HTOL”),
dt << 新列(列|| “ Δ”,数字,连续,公式(评估列表(列(dt,4)) ) );
);
);
谢谢
杰夫
回复:错误:“表达式不适合可用的列类型”谢谢PMroz! 我昨晚最终使用与你的非常相似的措辞解决了这个问题 - 我使用了这样的东西:
我想我用了解析.. 我不记得我是否必须使用 eval ,我大约 60% 确定我使用了。
如果有人需要我,请回复此内容,我会找到确切的语法。
dt << 新列( 解析(列|| " Δ")、数字、连续、公式(:^cols^ - :数据 0))
回复:错误:“表达式不适合可用的列类型”与@stephen.pearson类似的技术:
dt =新表( “演示” ,添加行( 3 ) ,
新专栏( “数据0” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 1 , 2 , 3 ] ) ) ,
新专栏( “数据100” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 4 , 5 , 6 ] ) ) ,
新专栏( “数据200” ,数字,连续的,格式( “最好的” , 12 ) ,设定值( [ 7 , 8 , 9 ] ) )
) ;
列= dt <<获取列名( “细绳” ) ;
为了( C = 1 , C <=尼特姆斯(列) , C ++,
如果(以。。开始(大写(列[ C ]) , “数据” ) ,
新列表达式=评估插入( "\[dt << 新列( 列|| “ Δ”,数字,连续,公式(:^列^ - :数据 0))]\") ;
评估(解析(新列表达式)) ;
) ;
) ;
回复:错误:“表达式不适合可用的列类型”列(dt,c)不等于:数据100就公式而言。
使该代码正常工作的一种方法是使用动态 JSL,它在执行 JSL 之前对其进行评估。
// 不确定这是否是正确的语法,但你明白了
目标列 =列(dt,c)<<获取名称(“字符串”);
//动态替换进入if子句
评估(
解析(
评估插入(
“\[
dt << 新列(列|| “ delta”,数字,连续,公式(:^目标列^ - :数据 0 ) );
]\"
) ) );
如果您的列名称中有特殊字符,您可能需要使用 :Name(" ^目标栏^ “) 在公式。 如果列名称中存在 ^/-+* 符号,这仍然会产生奇怪的结果,因为公式无法可靠地计算。
回复:错误:“表达式不适合可用的列类型”感谢您及时的回复!!
我有一个表“dt”,其中包含数据列。它们可以是“数据 0”或“数据 100”或“数据 200”,最多可达某个未知数字。
无论该列被称为什么,我想从中减去“data 0”列 - 即使该列是“data 0”(以便该列全为零,但其他列如“data 100”并不全为零” 。
所以我试图有一个 for 循环来检查每一列,例如,如果它被命名为“data 100”,我希望它自动创建一个“data 100 delta”列,其中包含公式:(data 100 - 数据0)。
我想我可以这样做:
dt = myTable();
cols = dt << GetColumnNames("字符串");
//等待(3);
For(c=1, c<=NItems(cols), c++,
如果( 开始于(列, “数据”),
dt << 新列(列|| “ delta”,数字,连续,公式(列(dt,c) - :数据 0 ) );
);
);
“:data 0”引用似乎有效 - 它将把“:data 0”数据复制到“data 100 delta”列中,但是如果我放入“column(dt,c)”,试图获取数据100列,出错了......
谢谢!!
回复:错误:“表达式不适合可用的列类型”杰夫,
你是对的,问题是“eval list(column(dt,4))”。 Eval List() 期望有一个要评估的列表。例如:{1,2,3}。
这是你的意图吗? Column(dt, 4) 的内容是列表吗? 由于该列中很可能有数值,因此会引发错误。
即使这样,JMP 数据表列也仅接受 3 种数据类型:数字、字符和行状态。 如果 Column(4) 的每个单元格中确实都有列表,那么它们实际上是字符串。即“{1,2,3}”。 在这种情况下,首先必须解析字符串以将其转换为表达式,然后 EvalList() 才能工作。
问题是,你想要这个公式做什么?