【问题标题】:Storing output of a function (with multiple outputs) in matrix将函数的输出(具有多个输出)存储在矩阵中
【发布时间】:2013-03-14 03:43:43
【问题描述】:

我有一个数据集,分为 20 个组。存储每组数据(2 列数据)的矩阵存储在一个列表中,以便我可以在循环中对每个集合执行函数。我想将可能在另一个矩阵中运行的任何函数的输出存储起来。

例如,如果我在所有 20 个组上运行 fitdistr(),我希望函数的输出存储在一个矩阵中,这样我就可以调用 distribution[1] 来调用第 1 组的结果。我有尝试了以下方法:

distribution<-ls()

for(i in (1:20))
  { distribution[[i]]<-fitdistr(as.numeric(data[[i]]$Column2,"normal") }

这成功存储了输出,我可以调用:

distribution[1] 

问题在于 fitdistr() 会产生 2 列数据 - 平均值和标准差。我检查了我不能调用给定点的平均值:

names(distribtuion)
"NULL"

所以我显然不能调用 get 方法,比如:

distribution[1]$mean

我将寻找均值和标准差(以及其他分布的其他参数)的趋势,所以如果可能的话,我希望将 fitdistr() 的结果以某种方式存储在矩阵中。即使我可以以某种方式仅调用平均值,在运行该函数时,我也可以创建一个空向量并将其填充到一个循环中,然后重复标准偏差。

我考虑过创建一个足够大的空矩阵来存储数据(因此它将是 20 行,每组 1 行,2 列,每个计算值 1)。我仍然不确定我将如何规定我希望将计算的平均值存储在第 1 列中,并将计算的标准偏差存储在第 2 列中。同样,这是一次仅向函数询问其多个输出中的一个的问题.

我还研究了其中一个应用函数,但这些似乎不适合我正在做的事情。

【问题讨论】:

  • 试试distribution[[1]]$mean(注意两个括号)。也不应该是estimate,而不是mean
  • ls() 是一个列出给定环境中对象的函数。它返回一个字符向量。
  • 啊,是的。我的意思是 list()

标签: r


【解决方案1】:

ls() 是一个列出给定环境中对象的函数。它返回一个字符向量。

你(可能)想要list()

但是你会在一个循环中增加你的列表。这是R地狱的第二圈。

而是将lapply 与适当的函数一起使用(很难说出您希望as.numeric 去哪里,但在您的示例中不正确)。

类似..

distribution <- lapply(data, function(x) fitdistr(as.numeric(x[['Column2']]),"normal")) 

【讨论】:

  • as.numeric 在那里,因为我有一个大数据集,它已被分箱。每个 bin 都保留了原始数据中的标题,因此当我尝试对数据运行 fitdistr() 函数时,我遇到了错误。我正在尝试您建议的代码行。我遇到了一些错误,但我会继续查看它,看看我是否可以让它工作。基于此错误,我认为我可能会遇到一个问题: .subset2(x, i, exact = exact) 中的错误:尝试选择少于一个元素的事实是,我的某些 bin 中的数据点为零。
  • @user2154249 -- 如果没有可重现的示例,我无能为力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2017-02-09
  • 2018-04-20
相关资源
最近更新 更多