在将几个重要列分组后,我想隐藏“阁楼”中剩余的列。
如何获取所有未分组列的列表?
获取所有列的列表,获取分组列的列表,并从列列表中删除分组列。
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Cities.jmp");
dt << group columns("xy", {:X, :y});
dt << group columns("pollutants", :Ozone :: :Lead);
collist = dt << Get Column Names("String");
grouped_list = {};
For Each({groupname}, dt << get column groups names,
c = dt << get column group(groupname);
groupcols = Transform Each({cr}, c, cr << get name);
Insert Into(grouped_list, groupcols);
);
nongrouped = Set Difference(collist, grouped_list);
For Each({colname}, nongrouped,
Column(dt, colname) << Hide(1);
);
wait(0);
通过字符串这种迂回的方式是合理的:)
我想知道为什么有必要这样做……
Names Default To Here(1);
// Setup
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dd= dt << group columns("xy", {:X, :y});
ee= dt << group columns("pollutants", :Ozone :: :Lead);
Type(ee)
collist = dt << Get Column Names();
grouped_list = {};
groups= dt << get column groups names;
For Each({groupname},groups,
groupcols= dt << get column group(groupname);
Insert Into(grouped_list, groupcols);
);
Show(grouped_list); // list of names with ":" {:OZONE, :CO, :SO2, :NO, :PM10, :Lead, :X, :Y};
show(collist);// list of names without ":" {city, Latitude, Longitude, ... }
nongrouped = Set Difference(collist, grouped_list); // ?!?! {city, CO, Latitude, Lead, Longitude, Max deg. F Jan, NO, OZONE, PM10, POP,"pop- m"n, Region, SO2, State, X, Y}
需要了解的重要细节:
- << group columns的返回值是一个字符串,而不是一个列组。
<< get column group returns a list of columns, not a column group
- 重要提示:此列列表以“:”开头列出列名。
- 比较:get column names() 返回一个不带前导“:”的名称列表。
- 这两个列表彼此不兼容
变通方法:
convert to list of columns = Function ({myColList},
Transform each({col},myColList, Name Expr(As column(dt, col)))
);
grouped_list = convert to list of columns(grouped_list); // looks like before, but is something completely different
collist = convert to list of columns(collist); //{:city, :Latitude, :Longitude, ... }
nongrouped = Set Difference(collist, grouped_list);
Show (nongrouped) // {:city, :Latitude, :Longitude, :Max deg. F Jan, :POP, :"pop- m"n, :Region, :State};
处理列数据时,我唯一关心的就是将它们全部转换为字符串,因为这样可以避免很多不必要的麻烦。在我看来,一开始就尝试使用字符串以外的任何格式来处理列数据基本上是没有意义的,因为你可以随时将字符串转换为其他“列格式”。而且,如果出于某种原因需要从字符串以外的格式开始,根据我的经验,这样做是得不偿失的。