楼主: 时光永痕
859 0

[数据挖掘新闻] R中的各种循环。 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)八级

3%

威望
0
论坛币
26 个
通用积分
57.2238
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34180 点
帖子
2732
精华
0
在线时间
321 小时
注册时间
2020-7-21
最后登录
2024-8-1

楼主
时光永痕 学生认证  发表于 2020-9-16 19:28:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
R中的各种循环。
通常,最好避免R中的循环。但是对于高度独立的任务,矢量化并非总是可能的。因此,如果问题是可分解的,则需要循环。
R中存在哪些不同类型的循环,在哪种情况下使用哪种循环?
在每种编程语言中,都存在for和while循环(有时直到循环)。在R中,这些循环是顺序的而不是那么快。
对于(x中的i)
{任务}
i = y
而(i <= x)
{任务
i = i + 1}
即使是原型制作,有时也会太慢。
但是如何提高速度呢?
R中有三个选项:
应用循环
并行化
RCPP
套用循环:
通常,您可以使用apply计算列,行或两者的一些标准统计量。但是您可以使用技巧来调整循环的应用顺序。语法为:
F <-函数(i,x,y,z,...)
{任务}
apply(as.data.frame(1:length(vector)),margin = 1,FUN = F)
在这种情况下,您不将向量用于直接计算,而是将其用作索引“ i”。
申请订单甚至更快。
F <-函数(i,x,y,z,...)
{任务}
sapply(1:length(vector),FUN = F)
并行化:
您可以使用循环并同时应用订单。你需要:
库(“ doParallel”)
库(“并行”)
库(“ foreach”)
首先定义核数。至少保留以下一项:
NumOfCores <-detectCores()-1
registerDoParallel(NumOfCores)
使用循环:
foreach :: foreach(x = 1:length(vector),.combine = rbind,.inorder = T,.multicombine = F)%多帕%
{任务}
此循环创建结果向量。
如果顺序不重要,则可以通过.inorder = F提高性能。这意味着自由处理器独立于迭代顺序进行下一个迭代。
或使用parSapply顺序:
群集<-makeCluster(NumOfCores)
parSapply(cl =簇,X = 1:长度(向量),FUN = F,x = x,y = y,z = z,...)
在这种情况下,将引用中的数据集成在括号内非常重要–您不能像普通的申请顺序那样直接连接到工作区。
RCPP:
首先,您需要安装RTools。
库(“ Rcpp”)
在C ++中定义一个函数,创建一个共享库并编译代码。
#include <Rcpp.h>
使用命名空间Rcpp;
// [[Rcpp :: export]]
double NameOfFunction(NumericVector矢量)
{任务}
然后可以在R中调用它:
sapply(X = 1:length(testVec),FUN = NameOfFunction,y =向量)
但是什么时候使用哪种循环呢?
从经验来看,我建议根据迭代次数和每次迭代的成本来做出决策。
不贵
昂贵
迭代次数少
for循环,while循环
RCPP,foreach
大量迭代
RCPP,sapply,apply,lapply,for循环,while循环
parSapply,RCPP

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:while 编程语言 For Hil

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-16 16:22