Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中使用apply代替循环_R_Loops_Sapply - Fatal编程技术网

如何在R中使用apply代替循环

如何在R中使用apply代替循环,r,loops,sapply,R,Loops,Sapply,这是一个关于应用程序利用率的问题。这种性质的问题得到了回答,这纯属巧合。我不是在寻找最简单的方法来做它(这会使它成为一个副本)。我写了一些随机的东西,可以用循环来解决。我正在寻找如何使用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

这是一个关于应用程序利用率的问题。这种性质的问题得到了回答,这纯属巧合。我不是在寻找最简单的方法来做它(这会使它成为一个副本)。我写了一些随机的东西,可以用循环来解决。我正在寻找如何使用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")

x我们可以使用
table
获得“y”的频率,并用
data.frame

 as.data.frame(table(y))
如果我们需要
应用
系列函数

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

这是你刚才告诉我的一个非常有用的功能。我现在意识到我的方法有多么复杂,但我明确的问题是,在这种情况下,我将如何使用apply而不是循环?@Andrew更新了apply家族函数如果你试图摆脱使用循环的习惯,那么就不要养成使用
apply
的新习惯。相反,培养一种习惯来矢量化你的代码。谢谢你们的投入。我会继续努力的。@akrun我肯定会的。直到你发表评论后几分钟我才接受。