【问题标题】:How to use apply instead of loops in R [duplicate]如何在R中使用apply而不是循环[重复]
【发布时间】:2016-06-13 14:57:29
【问题描述】:

这是一个关于apply使用的问题。回答这种性质的问题纯属巧合。我不是在寻找最简单的方法(这会使它重复)。我写了一些随机的东西,可以使用循环来解决。我正在寻找如何使用 apply 来编写我的问题。

在 R 中,我很难摆脱总是使用循环的习惯。这是我编写的一个基本示例脚本。它获取数据并说明表中每个唯一数字的频率。如果可能,我如何使用 apply 完成相同的事情?

x <- c(1,3,4,7,8,10,1,2,3,4,4,6,7,8,8,1,2,3,7,8)
y <- data.frame(x)
z <- data.frame(unique(y)) #finds unique values
i <- nrow(z) #nrow for loop length

id <- 1:i
repped <- data.frame()
for (i in id){
    zz <- y[which(y[,1] == z[i,]),] #takes each value from z and finds rows with identical values
value <- length(zz)
repped <- rbind(repped, value)
}

yy <- data.frame(z, repped)
colnames(yy) <- c("number", "frequency")

【问题讨论】:

    标签: r loops sapply


    【解决方案1】:

    我们可以使用table得到'y'的频率,并用data.frame包裹它

     as.data.frame(table(y))
    

    如果我们需要apply 家庭功能

    data.frame(z=unique(y$x),repped= sapply(unique(y$x), 
           function(i) sum(y$x==i)))
    

    【讨论】:

    • 你刚才告诉我的这个功能非常有用。我现在知道我的方法有多复杂,但我的明确问题是在这种情况下我将如何使用 apply 而不是循环?
    • @Andrew 更新了应用族功能
    • 如果你想摆脱使用循环的习惯,那么不要养成使用apply的新习惯。相反,请养成对代码进行矢量化的习惯。
    • 感谢两位的意见。我会继续努力的。
    • @akrun 我肯定会去的。直到您发表评论后几分钟,我才接受它。
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多