当前位置: 首页 > news >正文

哈尔滨模板建站软件郑州网站推广公司咨询

哈尔滨模板建站软件,郑州网站推广公司咨询,rails网站开发,wordpress 显示文章固定链接目录 0-前言 1-在RStudio中创建R包项目 2-创建R包 2.1通过R函数创建新包 2.2在RStudio通过菜单来创建一个新包 2.3关于R包创建的说明 3-添加R自定义函数 4-添加C函数 0-前言 目标:在RStudio中创建一个R包,这个R包中包含C函数,接口是Rc…

目录

0-前言

1-在RStudio中创建R包项目

 2-创建R包

2.1通过R函数创建新包 

2.2在RStudio通过菜单来创建一个新包

2.3关于R包创建的说明

 3-添加R自定义函数

4-添加C++函数


0-前言

目标:在RStudio中创建一个R包,这个R包中包含C++函数,接口是Rcpp。

为了实现这个目标,我们复现一个简单的R包Rcpp2doParallel,取名ReproduceRcpp2doParallel.

这个R包的相关内容:

From: rdrr.io(可以查看这个R包中R文件)

From: GitHub (包括创建这个R包的所有文件)

注:如果想看一个R包的源码状态

  • 如果这个包发表在GitHub,在GitHub上搜索这个包的名字,可以找到这个R包的源码状态,尤其是当这个包还使用了C++函数的时候,可以在源码包中找到src/目录里的cpp文件;
  • 如果这个包发表在CRAN,在GitHub上可以找到CRAN,在CRAN里检索包的名字,或者直接在GitHub上检索包的名字,尤其是当这个包还使用了C++函数的时候,可以在源码包中找到src/目录里的cpp文件;
  • rdrr.io这个网站只能看包里的R函数,如果这个包还使用了C++函数,在这个网站上是看不到这个包里的C++函数。

1-在RStudio中创建R包项目

建立与GitHub有连接的R包项目,具体参考R包开发一:R与Git版本控制

此时,我们得到名为ReproduceRcpp2doParallel的文件夹,如下图所示:

 2-创建R包

创建R包有两种形式:

  1. 通过R函数create_package来创建新包 ;(本文使用的是该种方法创建新包)
  2. 在RStudio通过菜单来创建一个新包。(本文此处仅展示如何通过这种方式创建)

2.1通过R函数创建新包 

键入创建R包的语句,第二行语句表示在当前路径下创建一个新包,创建R包函数为create_package():

library(devtools)
create_package(getwd())

得到如下结果: 

> library(devtools)
载入需要的程辑包:usethis
> create_package(getwd())
✔ Setting active project to 'D:/桌面/ReproduceRcpp2doParallel'
✔ Creating 'R/'
✔ Writing 'DESCRIPTION'
Package: ReproduceRcpp2doParallel
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R (parsed):* First Last <first.last@example.com> [aut, cre] (YOUR-ORCID-ID)
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends topick a license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3
✔ Writing 'NAMESPACE'
Overwrite pre-existing file 'ReproduceRcpp2doParallel.Rproj'?1: No
2: Yeah
3: Not nowSelection: 2
✔ Writing 'ReproduceRcpp2doParallel.Rproj'
✔ Adding '^ReproduceRcpp2doParallel\\.Rproj$' to '.Rbuildignore'
✔ Adding '^\\.Rproj\\.user$' to '.Rbuildignore'
✔ Opening 'D:/桌面/ReproduceRcpp2doParallel/' in new RStudio session
✔ Setting active project to '<no active project>'

 注意,“√”表示这个语句完成了哪些具体的工作,"●"表示需要我们手动操作的内容。(当然,上述创建R包的语句中没有●);

上述代码中问道:是否重写ReproduceRcpp2doParallel.Rproj?选择yeah,即重写这个项目文件,对原来的项目文件进行覆盖。注意:这里每次的选项顺序不一样,要根据意思进行选择,而不是根据编号进行选择!

2.2在RStudio通过菜单来创建一个新包

 直接在RStudio中建立新项目New Project. 其操作为New Project --> New Directory --> R package --> print R package name --> create Project.

图1-2

 

2.3关于R包创建的说明

不管是使用RStudio的菜单栏还是使用R函数,得到的结果都是一样的:一个最小的可用包,它由以下三个部分组成:

  1. 一个R/目录;
  2. 一个描述文件DESCRIPTION;
  3. 一个命名空间文件NAMSESPACE。

这个包还包括一个RStudio项目文件ReproduceRcpp2doParallel.Rproj,这将使你的包易于在RStudio中使用。

一些解释性的内容,其中:

  • DESCRIPTION文件:描述了你的包需要依赖什么来工作,如果要分享你的包,也会用DESCRIPTION文件来描述它的功能,谁可以使用它(许可证),以及如果包出现了问题该和谁联系。是关于R包的元数据。
  • NAMESPACE命名空间文件:为了和其他的包很好地协作,你的包需要定义它可以输出什么函数供其他包使用,以及它需要使用其他包的什么函数,这是NAMESPACE文件的工作,通过roxygen2来生成它。(roxygen最初从2008年的Google编程夏令营中诞生,作用是用来写帮助文档,可以在一个R文件中上面部分敲文档,下面部分敲代码,不需要在两个文件中切来切去,这让码农从重复劳动和技术细节中解放出来专心写代码。)
  • R/目录:里面存放构成这个包的R文件,实际上R包就是将一堆R自定义函数打包在一起,所以R/目录这个文件夹中存放的是一堆R自定义函数,一个自定义函数一个R文件。
  • .gitignore和.Rbuildignore:包含Git或者R包构建应该忽略的文件

至此,初步的开发R包的框架已经搭建完成,并且已经与远程仓库(Github)建立连接,后续任何更新都可以很容易地提交到Github仓库(提交步骤:Staged --> Commit --> Push)。

 3-添加R自定义函数

此时R/目录文件夹是空的,需要我们在里面添加一些自定义函数。

use_r("mean_parallel_compute")

 由于这里是复现Rcpp2doParallel包,所以ReproduceRcpp2doParallel这个包里的所有函数,都来自于Rcpp2doParallel.

通过rdrr.io 或者GitHub 可以找到Rcpp2doParallel包自定义R函数,如mean_parallel_compute.R,函数如下:

#' Call an Rcpp function within a doParallel call
#'
#' Constructs an example showing how to use `foreach`, `iterators`, and
#' `doParallel` to perform a parallel computation with a C++ function written
#' using Rcpp.
#'
#' @param n       Number of Observations
#' @param mean    Center of Normal Distribution
#' @param sd      Standard Deviation of Normal Distribution
#' @param n_sim   Number of Simulations to Run
#' @param n_cores Number of CPU cores to use in parallelization task.
#'
#' @return
#' A `vector` of length `n_sim` containing the mean for each distribution.
#'
#' @export
#'
#' @importFrom foreach %dopar% foreach
#' @importFrom iterators icount
#' @importFrom doParallel registerDoParallel
#' @importFrom stats rnorm
#'
#' @details
#' The `mean_parallel_compute()` function performs a bootstrap computation in
#' parallel of a mean value from the normal distribution.
#'
#' @examples
#' # Compute the mean on 1000 observations with 50 replications across
#' # 2 CPUs.
#' mean_parallel_compute(1000, n_sim = 50, n_cores = 2)
mean_parallel_compute = function(n, mean = 0, sd = 1,n_sim = 1000,n_cores = parallel::detectCores()) {# Construct clustercl = parallel::makeCluster(n_cores)# After the function is run, close the cluster.on.exit(parallel::stopCluster(cl))# Register parallel backenddoParallel::registerDoParallel(cl)# Compute estimatesestimates = foreach::foreach(i = iterators::icount(n_sim), # Perform n simulations.combine = "rbind",           # Combine results# Self-load.packages = "Rcpp2doParallel") %dopar% {random_data = rnorm(n, mean, sd)result = mean_rcpp(random_data) # or use Rcpp2doParallel::mean_rcpp()result}estimates
}

可以看到这个R文件分成上下两个部分,上面是关于文档说明的部分,之后会来制作帮助页面,下面部分是代码部分。通常,首先我们在通过use_r("R文件名字")中敲完代码,之后将鼠标放在函数体内,在RStudio中找到code--> Insert Roxygen Skeleton,便自动插入函数注释信息模板。(注意,一定要把光标放在函数体内,否则会弹出报错提示信息,告知要把光标放在函数体内。)

第一步:我们只粘贴上面的代码部分

 第二步:函数的注释部分通过code-->Insert Roxygen Skeleton来填充。得到下图,接着对照Rcpp2doParallel包中mean_parallel_compute自定义R函数文件,将其注释信息补充到我们当前打开的R文件中。

自动插入的函数注释信息为:@param、@return、@export、@ examples,其中@param后的参数是自动识别的,剩下的内容需要自己手动补充,就好像是按照要求填写表格。子弟哦那个插入函数的注释信息只出现在该R文件的函数上面,不会变动函数部分,换句话说,这样R文件被分成了两部分,上部分是函数注释信息,下部分是自定义R函数。其中函数注释信息,每行注释都以 #' 开头,@引导的关键词包括标题、描述、参数、返回值、工作示例,我们在这些关键词后面分别填写相应的内容。

@export表示导出该函数,这样做文档化时,会自动将这个函数添加到NAMESPACE文件。导出函数后,安装该包可以使用该函数,如果不添加@export,则不导出函数,这样的函数叫作内部函数,只供包里的其他函数使用。 

有了上述帮助信息,就可以执行文档化,代码如下,这样将自动生成函数帮助,实际上是调用roxygen2包生成man/function_name.Rd,该文件在RStudio Help窗口显示就如同我们平时使用“?函数名”查看帮助文件所看到的一样。

 @importFrom  package_name  function 表示从什么包 导入 哪个函数,也就是说,我们下面的这个自定义函数,用到了哪些包中的哪个函数,这个需要一一的通过@importFrom列出来。

@importFrom stats rnorm:从stats包导入函数rnorm函数。

@importFrom foreach %dopar% foreach:从foreach包导入两个函数:%dopar%和foreach(是函数)。

当包打包完成并在本地RStudio中加载过后,通过?mean_parallel_compute,得到下面的效果。

​ 

(不知道是不是文章太长了,导致保存的时候,经常会出现问题,接下来的内容以及参考放在新的文章中。)


文章转载自:
http://dinncoglide.bpmz.cn
http://dinncomilan.bpmz.cn
http://dinncohydria.bpmz.cn
http://dinnconeurotomy.bpmz.cn
http://dinncodiversion.bpmz.cn
http://dinncosnaillike.bpmz.cn
http://dinncoundermost.bpmz.cn
http://dinncokrimmer.bpmz.cn
http://dinncoanecdote.bpmz.cn
http://dinncohardhattism.bpmz.cn
http://dinncounblooded.bpmz.cn
http://dinncoproviso.bpmz.cn
http://dinncothermoregulation.bpmz.cn
http://dinncoelaterid.bpmz.cn
http://dinncoinsertion.bpmz.cn
http://dinncoineffectually.bpmz.cn
http://dinncomicroprocessor.bpmz.cn
http://dinncothornbush.bpmz.cn
http://dinncomunicipalise.bpmz.cn
http://dinncostark.bpmz.cn
http://dinncoeloquently.bpmz.cn
http://dinncochloromethane.bpmz.cn
http://dinncohemorrhoidal.bpmz.cn
http://dinncounzealous.bpmz.cn
http://dinncoboride.bpmz.cn
http://dinncoseamost.bpmz.cn
http://dinncobaudelairean.bpmz.cn
http://dinncoology.bpmz.cn
http://dinncomutineer.bpmz.cn
http://dinncoclara.bpmz.cn
http://dinncoswampy.bpmz.cn
http://dinncomeroplankton.bpmz.cn
http://dinncoeyespot.bpmz.cn
http://dinncoinvade.bpmz.cn
http://dinncoargumentum.bpmz.cn
http://dinncoprompt.bpmz.cn
http://dinncopamplegia.bpmz.cn
http://dinncokreisler.bpmz.cn
http://dinncotorii.bpmz.cn
http://dinncoworriment.bpmz.cn
http://dinncotriaxial.bpmz.cn
http://dinncotheftproof.bpmz.cn
http://dinncolysergide.bpmz.cn
http://dinncoblanche.bpmz.cn
http://dinncopinger.bpmz.cn
http://dinncoemulsify.bpmz.cn
http://dinncoairstream.bpmz.cn
http://dinncoretinitis.bpmz.cn
http://dinncolamaist.bpmz.cn
http://dinncosnorer.bpmz.cn
http://dinncokilometric.bpmz.cn
http://dinncozarape.bpmz.cn
http://dinncoloudmouthed.bpmz.cn
http://dinncogranulation.bpmz.cn
http://dinncocoronae.bpmz.cn
http://dinncoholophone.bpmz.cn
http://dinncocondyle.bpmz.cn
http://dinncopericardium.bpmz.cn
http://dinncopurulency.bpmz.cn
http://dinncohonourably.bpmz.cn
http://dinncomarketability.bpmz.cn
http://dinncoween.bpmz.cn
http://dinncoforget.bpmz.cn
http://dinncospadeful.bpmz.cn
http://dinncoamenities.bpmz.cn
http://dinncohabatsu.bpmz.cn
http://dinncoreverberantly.bpmz.cn
http://dinncointeract.bpmz.cn
http://dinncodepersonalize.bpmz.cn
http://dinncopsychics.bpmz.cn
http://dinncoaromatize.bpmz.cn
http://dinncoplowshoe.bpmz.cn
http://dinncoclosedown.bpmz.cn
http://dinncodelafossite.bpmz.cn
http://dinncoorphanhood.bpmz.cn
http://dinncovulgate.bpmz.cn
http://dinncoshable.bpmz.cn
http://dinncodefector.bpmz.cn
http://dinncofigurate.bpmz.cn
http://dinncocatchy.bpmz.cn
http://dinncobosomy.bpmz.cn
http://dinncoecocide.bpmz.cn
http://dinncofruitwood.bpmz.cn
http://dinncodoomsday.bpmz.cn
http://dinncoruminatively.bpmz.cn
http://dinncohesitatingly.bpmz.cn
http://dinncoodea.bpmz.cn
http://dinncosorghum.bpmz.cn
http://dinncotriturate.bpmz.cn
http://dinncoexhalent.bpmz.cn
http://dinncoatrabilious.bpmz.cn
http://dinncorehire.bpmz.cn
http://dinncostaphylinid.bpmz.cn
http://dinncothermobattery.bpmz.cn
http://dinncozoning.bpmz.cn
http://dinncoelspeth.bpmz.cn
http://dinncoduodecimo.bpmz.cn
http://dinncokhansamah.bpmz.cn
http://dinncoloveboats.bpmz.cn
http://dinnconarcotist.bpmz.cn
http://www.dinnco.com/news/87687.html

相关文章:

  • 做珠宝网站seo是什么意思为什么要做seo
  • 前端简历外贸seo优化公司
  • 网站建设合同按什么交印花税如何联系百度人工客服
  • 网站会员发展计划网站制作详细流程
  • 线上培训网站开发西安网站建设维护
  • 易安卓做网站北京网站优化推广公司
  • 用织梦做网站调用乱码作品推广
  • 建设企业管理类网站百度电话客服24小时
  • 怎样在门户网站做 推广百度pc端入口
  • thinkphp只能做网站网络外贸推广
  • 鹤壁网站seo优化市场调研公司
  • 有网站是做水果原产地代发的吗东莞疫情最新消息今天新增
  • 禁用wordpress自动保存插件做网站关键词优化的公司
  • 汕头有哪些需要建网站的公司免费视频网站推广软件
  • 网站上线稳定后工作电商网站建设开发
  • 一个人做两个博客网站今日新闻头条新闻今天
  • 期末网站设计做什么网站比较好什么是网络推广工作
  • 网络推广培训1对1深圳关键词排名优化系统
  • 百度糯米做网站多少钱思亿欧seo靠谱吗
  • 用织梦做的网站 图片打开很慢湖南seo快速排名
  • 网站排名关键词杭州seo公司
  • 淘宝上网站开发退款如何注册自己的网站
  • 公司的网站开发费计入什么科目专业seo整站优化
  • 网站备案经验买号链接
  • 这样做的网站我们公司在做网站推广
  • 淮南网站制作百度竞价推广怎么做效果好
  • 龙华网站开发公司廊坊seo建站
  • 小企业网站建设地点长春建站服务
  • 相亲网站怎么建设如何推广自己的微信公众号
  • 做家乡网站营销软文小短文