【问题标题】:How to use apply function in R to remove loop如何在R中使用apply函数来删除循环
【发布时间】:2014-04-21 01:57:02
【问题描述】:

我有一个矩阵

A <- matrix(c(1,2,1,2,4,4,6,7,6),nrow=3,ncol=3)

所以基本上我将每个元素替换为它在相应列中出现的频率,并取行中所有元素的乘积。

我的方法

fr <- c(paste("fr", 1:97, sep = ""))
for(i in 1:3){assign(fr[i],table(A[,i]))}
prob=matrix(c(rep(1,3)),3, byrow = T)
for (i in 1:3)
{
   for (j in 1:3)
{
    prob[i]<-prob[i]*get(fr[j])[as.character(A[i,j])]
}
}

有没有什么办法不用写循环,用矩阵结构来解决这个问题?

我想我们可以使用apply

我正在使用 R 语言

【问题讨论】:

  • 既然您使用的是 R,为什么不以其他 R 用户可以轻松使用的方式共享您的数据?
  • 看来apply(ifelse(A == 1 | A == 6, 2/3, 1/3), 2, prod) 可能是你想要的,或者接近它。但是,是的,请让这个 R-reproducible。
  • @AnandaMahto 我已经编辑了问题并提供了我正在使用的代码

标签: r apply


【解决方案1】:

你的矩阵:

A <- matrix(c(1,2,3,4,5,6,1,4,6), ncol=3, byrow=T)

应用 colwise 一个计算概率表的函数:

B <- apply(A, 2, function(x) prop.table(table(x))[as.character(x)])
#           [,1]      [,2]      [,3]
# [1,] 0.6666667 0.3333333 0.3333333
# [2,] 0.3333333 0.3333333 0.6666667
# [3,] 0.6666667 0.3333333 0.6666667

逐行计算乘积:

apply(B, 1, prod)
#[1] 0.07407407 0.07407407 0.14814815

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2015-08-08
    • 2016-06-13
    相关资源
    最近更新 更多