未定义函数或变量 'DataMatrix'

Undefined function or variable 'DataMatrix'

我试图通过调用 DataMatrix() 函数来创建 DataMatrix 变量。 但是这个功能不存在。如果我输入:

>> DataMatrix

我收到此错误消息:

Undefined function or variable 'DataMatrix'.

我确实安装了 Bioinformatics Toolbox,我的版本是 Mac

上的 2016b

有什么想法吗?

正如@Andras 在评论中提到的,导入和使用此 class 的过程已经 mentioned in the documentation for the class(尽管如果您错过了它可能会被原谅,因为它是不在处理语法的页面顶部)。


tl;dr 版本是您应该访问 class 构造函数,例如:

D = bioma.data.DataMatrix(...);

或者,import先从包/命名空间中取出class,然后直接使用,即:

import bioma.data.DataMatrix;
D = DataMatrix(...);

说明

你首先需要这一步的原因是因为这个 class 包含在一个 "package" (a.k.a.a "namespace") 中。阅读 matlab 文档中名为“Packages Create Namespaces”的部分,了解更多这意味着什么。

但是,原则上归结为这样一个事实:如果您有一个名称带有 + 前缀的文件夹,那么它就充当其中包含的函数的名称空间。

因此,如果您的路径上有一个名为 +MyPackage 的文件夹,并且其中包含一个名为 myfunction.m 的函数 m 文件(但这不在您的路径中),那么您可以访问通过键入 MyPackage.myfunction() 在 matlab 终端中使用此函数。

,你可以从那个包/命名空间import MyPackage.myfunction然后直接使用myfunction

所以,回到 DataMatrix,你会发现如果你搜索 class 定义在你的 matlab 文件夹中的位置,你会在这里找到它:

./toolbox/bioinfo/microarray/+bioma/+data/@DataMatrix/DataMatrix.m

并且大概 ./toolbox/bioinfo/microarray 已经在您的路径中了。

bioma package/namespace 在你的路径中,你可以访问它下面的 data package/namespace,然后是 DataMatrix 的 class 定义做 bioma.data.DataMatrix


PS:此外,文件夹名称前的“@”前缀表示一个class文件夹,包含构造函数和class方法。如果此“@folder”在您的路径中(或导入等),则这意味着您可以访问底层构造函数。如果您有兴趣,这是 matlab's old object-oriented style, before the classdef keyword was introduced. You can read more about class directories here 的残余。