mapply()生成什么数据类型?

时间:2014-06-18 20:19:59

标签: r

这就是我的代码。 a,b,c和d是缩放器,e是矢量列表。 A,B,C和D是矢量。

GetOutput=function(a,b,c,d){
  e=FunOther(a,b,c,d)
  i=mean(e$f)
  j=mean(e$g)
  k=abs(mean(e$h))
  return(list(b=b,i=i,j=j,k=k))
}
Output=mapply(GetOutput,A,B,C,D)

GetOutput将返回4个缩放器的列表。我想把它归结为输入矩阵和输出矩阵。我一直在使用for循环,但我想我会尝试使用mapply。

假设A,B,C和D的长度为100.我只想得到一个长度为100的向量,它给出了我所有的i,这样我就可以计算它们的最小值。那就是j和k的相同。这是蒙特卡洛研究的一部分。但我无法理解Output对象。它似乎是一个列表清单。我认为是一个班轮变成了几个操作。我能想到的最好的是:

Output2=as.data.frame(t(Output))
OutputMeans=c(mean(as.numeric(Output2$i)),
              mean(as.numeric(Output2$j)),
              mean(as.numeric(Output2$k)))

这对我来说似乎只是香蕉。我虽然可以直接使用均值函数对Output进行操作,而无需为所有这些转换而烦恼。

1 个答案:

答案 0 :(得分:0)

如果你写了return( c(b=b,i=i,j=j,k=k) ),那么mapply列表中的每个元素都将是一个命名向量,而不是你得到的......列表列表。由于'simplify'参数可以让你返回一个矩阵,你也可以返回一个非递归的结果。因为mapply是如此多才多艺,它为您提供了对返回结构的多级控制。

另一个R编程提示:不要在函数内使用'$'作为提取函数。如果你确定你的列名你可以使用`[['colname']]但是然后使用'[['你可以稍后将你的函数概括为接受列名作为参数,'$'不支持的功能。