通过 JSL 隐藏和/或排除大量列的有效方法对于基因组学示例@Chris_Kirchberg已经发展(见https://community.jmp.com/t5/Technical-Reference-Library/C40-mRNA-Expression-Cattle-Follicle-Development/ta-p/519216 ),工作流程的一部分是识别由于数据质量问题而应从分析中排除的列。他和我正在编写一个脚本来高效地执行此操作。该示例有 28000 列,其中大约 9000 列需要隐藏和排除。我们现在正在使用 JSL 中的循环来执行此操作,但它相当慢(需要几秒钟)
// collist is a list of column references
For( i = 1, i <= N Items( collist ), i++,
collist[i] << Hide( 1 ) << Exclude( 1 )
);
似乎应该有更快的方法来做到这一点。有什么建议可以加快速度吗?
回复:通过 JSL 隐藏和/或排除大量列的有效方法追问:我把这个issue分享给了开发,并且做了一些改进来加速这种操作。随着列数的增加,循环遍历列以隐藏/排除的速度仍然会变慢,但是一些用于隐藏和排除列的新 JSL 消息将可用,并且操作记录器将在适当的地方使用它们。 这应该在 JMP18 开发版本和 18 早期采用者版本中可用。
来自 Jira 问题 (JMP-13445)
通过在数据表上添加新的隐藏列和排除列命令进行修复。 他们可以这样称呼:
<SPAN class="">dt << 隐藏列; // 隐藏选中的列 </SPAN>
dt << 隐藏列(1|0); // 隐藏或取消隐藏列
dt << 隐藏列( COLUMN_LIST ); // 隐藏列出的列
dt << 隐藏列( 1|0, COLUMN_LIST ); // 隐藏或取消隐藏列出的列
排除列使用相同的语法。
回复:通过 JSL 隐藏和/或排除大量列的有效方法快速更新:如果我将它包含在一个更大的脚本中,这似乎在 Mac 上工作,但在 Windows 上不起作用。我需要为 Windows 版本的 JMP 做一些特别的事情才能让 Main Menu () 调用在更大的脚本中工作吗?
回复:通过 JSL 隐藏和/或排除大量列的有效方法Main Menu( "Cols:Hide/Unhide" );
再次尝试此操作,但将其复制并粘贴到我的脚本中,现在可以使用了。 甘德森的太阳! 为什么它不起作用,现在却起作用了? 我唯一能想到的是,如果我只运行选择列的那一行,它就可以工作,但是当放入一个选择列的脚本时,下一行就是这个,它不起作用。
回复:通过 JSL 隐藏和/或排除大量列的有效方法@brady_brady ,出于某种原因,主菜单(“列:隐藏/取消隐藏”)在 Windows 10 JMP 17 EA9 上不起作用。 这可能是什么原因? 至少它对我不起作用。
回复:通过 JSL 隐藏和/或排除大量列的有效方法主菜单命令非常快,我不认为它们是黑客,但如果 JSL 可以通过消息运行与主菜单命令相同的代码,那就太好了。 或者,可以在脚本指南中扩展主要消息语法,并在主菜单在 Mac 和 PC 之间看起来不一样的情况下跨平台标准化。
回复:通过 JSL 隐藏和/或排除大量列的有效方法它是处理基因组表达数据的工作流程的一部分。分析数据表中通常有许多列(其中该列对应于特定的基因组表达变量)几乎没有表达,因此您希望识别这些列,然后不在进一步分析中使用它们。隐藏和排除是一种不在后续分析平台对话框中显示这些列的便捷方式。虽然我们也可以只删除要使用的列或对列进行子集化,但将排除/隐藏的列保留在数据表中还是有一些价值的。
回复:通过 JSL 隐藏和/或排除大量列的有效方法我也尝试使用 for each() 但它仍然很慢
for each({c, ii}, collist,
c << Hide(1) << Exclude(1)
)
那同样很慢。
使用主菜单命令运行速度超快(感谢@yuichi_katsumur !),但感觉就像一个 hack。我很欣赏这方面的建议和帮助。
回复:通过 JSL 隐藏和/或排除大量列的有效方法你好山姆,
下面的脚本怎么样? 它要快得多。
dt << clear column selection();
dt << Select Columns( collist );
Wait( 0 );
Main Menu( "Cols:Hide/Unhide" );
Main Menu( "Cols:Exclude/Unexclude" );
dt << clear column selection();
回复:通过 JSL 隐藏和/或排除大量列的有效方法我尝试了一些技巧,但没有一个奏效。
- 将作品封装在
dt << Begin Data Update;
//work here...
dt << End Data Update;
- 使数据表不可见
- 将数据表设为私有
隐藏和排除此应用程序中的列的目的是什么? 也许有一个解决方法。
回复:通过 JSL 隐藏和/或排除大量列的有效方法
我也试过
collist << Hide(1);
collist << Exclude(1);
这也很慢。