【问题标题】:R apply function with 2 dataframeR应用功能与2个数据框
【发布时间】:2016-02-09 11:07:48
【问题描述】:

我想使用 rminer 包中的 mmetric 函数 我有两个数据集(观察和预测),我想按列应用函数,我该怎么做?

预测:

     aa     oo    dcl     iy     sh
   2.255  0.648 -0.111  0.111 -0.049
   0.239  0.753 -0.972  1.907  0.000
   2.521  1.072 -0.107  0.100 -0.068
   0.415  1.072  0.735  0.789  0.885
   0.101  0.629  0.293  0.740  1.562
   0.496 -0.260 -0.133 -0.078  0.108

观察:

    aa     oo    dcl     iy     sh
   2.255  0.648 -0.111  0.111 -0.049
   0.239  0.753 -0.972  1.907  0.000
   2.521  0.403 -0.107  0.100 -0.068
   0.415  2.713 -0.637  0.789  0.885
   0.101  0.629  0.293  0.740  1.562
   2.606 -0.260 -0.133 -0.078  0.108

对于我可以使用的单列

mmetric(obs[,1], pred[,1], mmetric = "MAE")

如何自动将其应用于整个数据集?我尝试使用“应用”并搜索如何传递更多参数,或如何使用更多数据集/列表,但没有找到任何解决方案!

谢谢!

【问题讨论】:

  • 您可以 lapply 覆盖您的两个 data.frames 名称。我的意思是lapply(names(obs), function(x){mmetric(obs[x] , pred[x], mmetric = "MAE")})

标签: r apply


【解决方案1】:

我们可以使用Map在对应的列上应用函数mmetric

mapply(function(x,y) mmetric(x,y, metric='MAE'), obs, pred)
#     aa        oo       dcl        iy        sh 
#0.3516667 0.3850000 0.2286667 0.0000000 0.0000000 

或者我们不需要匿名函数

Map(mmetric, metric='MAE', obs, pred)

【讨论】:

  • 你确定吗?我试过了,它正在逐个单元格地应用函数,我在原来的 2 个数据集上得到了 20265 个结果,尺寸为 4053 * 5
  • @Sojers 我更新了我得到的结果。根据您的帖子,您有两个 data.frames。我假设您有两个矩阵而不是“data.frames”。在这种情况下,mapply(function(x,y) mmetric(x, y, metric='MAE'), as.data.frame(obs), as.data.frame(pred))
  • 谢谢!第二个数据集没有转换为data.frame,你能向我解释一下为什么它是按列映射函数工作的吗?可以按行使用吗?还是通过细胞?只是为了理解代码并将其应用于其他问题!
  • @Sojers 矩阵是具有暗淡属性的向量。矩阵中的元素就像向量中的单个元素。所以,如果你有一个 5x5 矩阵,通过使用Map/mapply,它将给出 25 个比较。 data.frame 是具有相同长度元素的 list。因此,data.frame 列或 list 元素的行为方式与我们预期的相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多