【问题标题】:How do you access a function stored as an element in a list in R?如何访问存储为 R 列表中元素的函数?
【发布时间】:2020-09-09 20:44:02
【问题描述】:

我正在使用一个带有函数的 R 包,该函数返回一个大的 nlsList,它是一个长度为 10 的列表。这 10 个列表元素中的每一个都是长度为 5 的列表,其中包括一个长度为 16 的列表。这第三个-长度为 16 的级别列表是函数列表。我假设它们是可运行的函数,所以我的问题是:如何执行它们?

例如,如果我按名称访问元素,这就是我得到的:

> tnr.fitL[["2016:CT"]][["m"]]["fitted"]
$fitted
function () 
form
<bytecode: 0x0000000020cb5548>
<environment: 0x0000000020cbade0>

这看起来像(很少)关于函数的信息,但我想做的是运行嵌入的“拟合”函数本身,我希望它能给我从模型拟合到某些数据的估计值,为此这个 nlsList 对象是输出。

如果感兴趣的话,生成 nlsList 对象的是 nlraa 包的 nlsLMList 函数,版本 0.73。

提前致谢。

【问题讨论】:

  • tnr.fitL[["2016:CT"]][["m"]][["fitted"]]() 有效吗? (注意额外的括号和括号)

标签: r list function


【解决方案1】:

您必须添加() 才能执行函数调用。即tnr.fitL[["2016:CT"]][["m"]]["fitted"]()

【讨论】:

  • 我在您的示例中没有看到 ()。你的意思是:tnr.fitL[["2016:CT"]][["m"]]["fitted()"]。当我运行它时,输出是 $ NULL.
  • 实际上,当我运行它时,列表中的每个函数都返回相同的内容:$ NULL。
  • 好的,是的,我试过 tnr.fitL[["2016:CT"]][["m"]]["fitted"]()。但我得到错误:尝试应用非功能
  • 感谢您的宝贵时间。
【解决方案2】:

好的,我发现您使用 nlsList 对象作为参数调用嵌入式函数。因此,例如,对于“拟合”公式,它被称为:

> fitted(tnr.fitL)
  2016:CT   2016:CT   2016:CT   2016:CT   2016:CT   2016:CT   2016:CT   2016:CT   2016:CT 
 4.320019  4.320019  9.629277  9.629277  9.629277  9.629277 12.464655 12.464655 12.464655 

这似乎是 R 中的标准“拟合”函数(在 {stats} 中),使用与拟合值相关的模型拟合对象(在本例中为 nlsList 对象)调用。

所以我猜测这是如何执行 List 对象中的嵌入函数的标准功能。在这种情况下,我不认为 16 个嵌入函数(包括“fitted”)是对象的自定义函数,而是充当可以在对象上运行哪些标准 R 函数的索引和激活点。只是一个猜测。如果任何阅读本文的人知道此功能如何在 R 中工作的文档,请发布它。我找不到。

【讨论】:

  • fitted() 对不同类型的对象有不同的 S3 方法。 tnr.fitL 是一个 nlsList 对象,它也有类 lmList。您将获得 S3 方法 nlme:::fitted.lmList 的结果。它与列表对象无关。
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2017-01-21
  • 1970-01-01
相关资源
最近更新 更多