使用knitr生成复杂的动态文档

2024-01-22

最小的可重现的示例 (RE)下面是我尝试弄清楚如何使用knitr用于生成复杂的动态文档,这里的“复杂”不是指文档的元素及其布局,而是指非线性逻辑底层 R 代码块。虽然提供的 RE 及其结果表明solution,基于这种方法可能效果很好,我会喜欢知道: 1) 这是一个correct使用方法knitr对于此类情况; 2)有没有优化可以用来改进方法; 3)什么是替代方法,这可能会减少粒度代码块。

EDA源代码(文件“reEDA.R”):

## @knitr CleanEnv
rm(list = ls(all.names = TRUE))

## @knitr LoadPackages
library(psych)
library(ggplot2)

## @knitr PrepareData

set.seed(100) # for reproducibility
data(diamonds, package='ggplot2')  # use built-in data


## @knitr PerformEDA

generatePlot <- function (df, colName) {

  df <- df
  df$var <- df[[colName]]

  g <- ggplot(data.frame(df)) +
    scale_fill_continuous("Density", low="#56B1F7", high="#132B43") +
    scale_x_log10("Diamond Price [log10]") +
    scale_y_continuous("Density") +
    geom_histogram(aes(x = var, y = ..density..,
                       fill = ..density..),
                   binwidth = 0.01)
  return (g)
}

performEDA <- function (data) {

  d_var <- paste0("d_", deparse(substitute(data)))
  assign(d_var, describe(data), envir = .GlobalEnv)

  for (colName in names(data)) {
    if (is.numeric(data[[colName]]) || is.factor(data[[colName]])) {
      t_var <- paste0("t_", colName)
      assign(t_var, summary(data[[colName]]), envir = .GlobalEnv)

      g_var <- paste0("g_", colName)
      assign(g_var, generatePlot(data, colName), envir = .GlobalEnv)
    }
  }
}

performEDA(diamonds)

EDA 报告 R Markdown 文档(文件“reEDA.Rmd”):

```{r KnitrSetup, echo=FALSE, include=FALSE}
library(knitr)
opts_knit$set(progress = TRUE, verbose = TRUE)
opts_chunk$set(
  echo = FALSE,
  include = FALSE,
  tidy = FALSE,
  warning = FALSE,
  comment=NA
)
```

```{r ReadChunksEDA, cache=FALSE}
read_chunk('reEDA.R')
```

```{r CleanEnv}
```

```{r LoadPackages}
```

```{r PrepareData}
```

Narrative: Data description

```{r PerformEDA}
```

Narrative: Intro to EDA results

Let's look at summary descriptive statistics for our dataset

```{r DescriptiveDataset, include=TRUE}
print(d_diamonds)
```

Now, let's examine each variable of interest individually.

Varible Price is ... Decriptive statistics for 'Price':

```{r DescriptivePrice, include=TRUE}
print(t_price)
```

Finally, let's examine price distribution across the dataset visually:

```{r VisualPrice, include=TRUE, fig.align='center'}
print(g_price)
```

结果可以在这里找到:

http://rpubs.com/abrpubs/eda1 http://rpubs.com/abrpubs/eda1


我不明白这段代码有什么非线性;也许是因为这个例子(顺便感谢)足够小来演示代码,但又不够大来展示问题。

特别是我不明白其中的原因performEDA功能。为什么不将该功能放入 Markdown 中?读起来似乎更简单、更清晰。 (这个未经测试...)

Let's look at summary descriptive statistics for our dataset

```{r DescriptiveDataset, include=TRUE}
print(describe(diamonds))
```

Now, let's examine each variable of interest individually.

Varible Price is ... Decriptive statistics for 'Price':

```{r DescriptivePrice, include=TRUE}
print(summary(data[["Price"]]))
```

Finally, let's examine price distribution across the dataset visually:

```{r VisualPrice, include=TRUE, fig.align='center'}
print(generatePlot(data, "Price"))
```

看起来您要显示所有变量的图;您也许想在那里循环吗?

另外,这不会改变功能,但在 R 习惯用法中会更重要performEDA返回一个包含其创建的内容的列表,而不是分配到全局环境中。我花了一段时间才弄清楚代码的作用,因为这些新变量似乎没有在任何地方定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用knitr生成复杂的动态文档 的相关文章

  • 将循环转换为并行计算的函数

    我正在使用 R 编程语言 我遇到这个问题 我试图找出两个 shapefile 之间的成对交集 即第一个 shapefile 中的每个多边形与第二个 shapefile 中的所有多边形相交的百分比 我想我找到了解决这个问题的基本方法 Load
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 计算每个唯一值出现的次数

    假设我有 v rep c 1 2 2 2 25 现在 我想计算每个唯一值出现的次数 unique v 返回唯一值是什么 但不返回它们的数量 gt unique v 1 1 2 我想要一些能给我的东西 length v v 1 1 25 le
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N

随机推荐

  • 如何在 OS X 中为我的文档创建图标

    我有一个基于文档的应用程序 因此 我需要为我的应用程序提供一个图标 也为我的文档提供一个图标 在 Xcode Images xcassets 中有一个名为 AppIcon 的项目 我可以用它来设置应用程序的图标 但是如何为我的文档制作图标呢
  • 为什么 jQuery 会抛出错误“fadeOut is not a function”?

    我正在使用 jQuery 并将以下代码放入我的 javascript 中 function HideMe itemID var myDiv item itemID myDiv fadeOut slow 但它给了我这个错误 fadeOut不是
  • Node/Express文件上传

    我正在使用 Node v0 10 26 和 Express v4 2 0 而且我对 Node 还很陌生 在过去的三个小时左右的时间里 我一直在用头撞桌子 试图让文件上传表单与节点一起使用 此时我只是试图让 req files 不返回未定义
  • Java 中 LTRIM 和 RTRIM 的良好替代品是什么?

    JavaScript 的一个好的替代品是什么ltrim and rtrim Java 中的函数 使用正则表达式你可以写 String s String ltrim s replaceAll s String rtrim s replaceA
  • 在Vba中从多个工作表中收集平均值

    我需要将多个工作表中某个范围 C2 C11 的平均值计算到一个新工作表中 如果添加新工作表并将数据输入到指定范围内 该功能应该仍然有效 到目前为止我有这个 Sheets Add Dim myavg As Collection Set mya
  • php彩票问题多赢家问题

    我用 php 创建了一个彩票脚本 我现在的问题是选择不止一名获胜者 因为玩家的门票上有可能有相同的号码 这里我提供两个表结构和源代码 lotto game id int jackpot int status varchar10 pick 1
  • 如何使用Java JSch库逐行读取远程文件?

    我正在尝试使用Java逐行读取文件 这非常简单 stackoverflow com上有多种解决方案 但这里需要注意的是该文件位于远程服务器上 并且它不是可以获取本地副本 它是单个 txt 文件中数百万条亚马逊评论的大量集合 JSch 附带了
  • 毛伊岛:在 Android 上使用 Acrobat Reader 打开捆绑(资产)pdf 文件

    我的应用程序在下面有一个 PDF 帮助文件Resources Raw helpfile pdf 在 Android 上 应通过将其 发送 到 Acrobat Reader 来打开它 前提是它已安装在设备上 我尝试了像 从捆绑文件写入应用程序
  • 如何以 Symfony 形式制作 RadioButton?

    我有必须用 Symfony Form 重做的表单 但我坚持在这个地方 div class currency label div
  • 从 C# 打开新的 Outlook 邮件

    我希望从我的程序中生成 Outlook 消息 我能够从程序中构建和发送或构建并保存 我想要的是构建然后显示以允许用户从 AD 列表中手动选择收件人 下面的代码是此处示例和其他教程站点的混合 但是我找不到一个只是构建然后 显示 电子邮件而不保
  • Xcode 4 使用不同的配置设置构建静态库依赖项

    我想知道是否可以使用不同的配置设置编译依赖的静态库 我的情况是我有一个项目 project pbxproj 它依赖于静态库 cocoa touch 项目 libStatic pbxproj 我的项目有 3 个配置设置 例如调试 发布和临时配
  • 将列表转换为 pandas 中的日期时间

    我有福尔 熊猫列表 str jan 1 jan 15 feb 1 feb 15 mar 1 mar 15 apr 1 apr 15 may 1 may 15 jun 1 jun 15 jul 1 jul 15 aug 1 aug 15 se
  • 如何在 Android 上停止 HttpURLConnection 连接

    我使用 AsyncTask 连接 URLPath 如下代码所示 Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceStat
  • 从任何活动中打开侧栏应用程序启动器

    我是 Android 开发新手 我正在考虑创建一个示例启动器应用程序来替换 Android 默认启动器 我已经创建了这个启动器 但我面临几个问题 1 单击 应用程序 按钮后 我将显示设备上安装的所有应用程序 但应用程序图标的大小不同 我尝试
  • 如何将遗传算法与一些启发式算法相结合

    我正在研究大学调度问题并为此使用简单的遗传算法 实际上它效果很好 可以在 1 小时内将目标函数值从 0 优化到 90 大约 但随后这个过程会急剧减慢 需要几天时间才能得到最佳解决方案 我看到很多论文认为将其他算法与遗传算法混合是合理的 请您
  • ASP.NET MVC 自定义路由约束、依赖注入和单元测试

    关于这个话题 我又问了一个问题 ASP NET MVC 自定义路由约束和依赖注入 https stackoverflow com questions 8308642 asp net mvc custom route constraints
  • 如何使用网络音频 API 播放声音文件 Safari?

    我正在修改一个脚本来播放我在 Codepen 上找到的 mp3 以使其能够在 Safari 上运行 在 Firefox 和 Chrome 中它工作正常 但 Safari 抱怨 未处理的承诺拒绝 类型错误 没有足够的参数 索引 html 25
  • 尝试安装biopython后Conda返回未找到属性错误符号

    我正在尝试让biopython工作 似乎我在这个过程中破坏了conda 此时 将显示 conda 的帮助菜单 并且conda version回报conda 4 7 5但其他任何事情包括conda info抛出错误AttributeError
  • 在树枝中显示货币符号

    如何在树枝中显示货币符号 我保存了符号的数值 例如 for EURO 8364 for DOLLAR 36 当我渲染这些值时 被转换为 amp 并且货币符号不显示 任何想法将不胜感激 谢谢 为了做得好 你必须添加一个function htt
  • 使用knitr生成复杂的动态文档

    最小的可重现的示例 RE 下面是我尝试弄清楚如何使用knitr用于生成复杂的动态文档 这里的 复杂 不是指文档的元素及其布局 而是指非线性逻辑底层 R 代码块 虽然提供的 RE 及其结果表明solution 基于这种方法可能效果很好 我会喜