R - 请解释一下这段代码以及如何创建一个类似输出的函数?

时间:2015-03-10 20:35:03

标签: r rstudio

我是R的新手,主要使用其他人编写的旧代码。我正在尝试创建自己的R函数。

我发现以下一些代码用于特征值分解。

eigenMatrix = eigen(myMatrix)[[2]]
eigenVals = eigen(myMatrix)[[1]]

这里有单个函数可以输出2个不同的数据结构,即矢量和矩阵,取决于括号中的值。

当我搜索具有多个输出的函数时,它们通常使用列表一次输出多个变量,这些变量不起作用,可能是因为类型不同。

我不明白为什么有两个方括号以及基础功能如何起作用。

1 个答案:

答案 0 :(得分:0)

发布的代码采用特征函数,返回一个包含2个值的列表。 然后[[]]用于从列表中提取第一个和第二个项目。 返回底层结构需要[[]],这里有更好的解释:How to Correctly Use Lists in R?

此外,由于特征函数运行两次,因此问题中的代码效率低下。

resultList = eigen(myMatrix)
eigenMatrix = resultList[[2]]
eigenVals = resultList[[1]]

这段代码更好,因为eigen只运行一次,并将函数的结果保存为列表,然后从列表中读取值。

对于函数本身可以作为具有多个输出的任何函数进行编码,例如:https://stat.ethz.ch/pipermail/r-help/2007-March/126851.html或此处:How to assign from a function with multiple outputs?

列表值可以包含任何结构,[[]]可用于返回每个值的基础结构。