【问题标题】:Markdown function for multiple csvs stored in same folder存储在同一文件夹中的多个 csv 的 Markdown 功能
【发布时间】:2021-01-14 13:59:22
【问题描述】:

我在 r markdown 中编写了一个函数。我想在存储在同一文件夹中的多个不同 csv 上运行以下命令。

因此,我将如何创建一个通用函数 [代替我的整个代码中的以下代码],以便它允许导入和分析文件夹中的每个 csv?

dat <- read.csv("importsinglecsv.csv",
                    header = TRUE,
                    sep=',')

下面概述的总体代码:

Single Test
    dat <- read.csv("importsinglecsv.csv",
                    header = TRUE,
                    sep=',')
    
    datA <- subset(dat, Version == "A")
    datB <- subset(dat, Version == "B")
    olsA <- lm(measure ~ mark, data = datA)
    olsB <- lm(measure ~ mark, data = datB)
    coeffs <- rbind(olsA$coefficients, olsB$coefficients)
    r.Squared <- rbind(summary(olsA)$r.squared, summary(olsB)$r.squared)
    corA <-cor(datA$measure, datA$mark)
    corB <- cor(datB$measure, datB$mark)
    ```

我试图开发一个链接到markdown文件的for循环,但是做错了.....

for (i in length(df)) {
  dat <- df[[i]]
  datA <- subset(dat, Version == "A")
  datB <- subset(dat, Version == "B")
  rmarkdown::render('"filepath"/tes.rmd',
                    output_file=paste0("filepath", df[i], ".html"),
                    params=list(new_title=paste("Exploratory analysis -", i)))
}

【问题讨论】:

  • 所以你想要一个单独的文件来打开这些文件并创建你可以从 R Markdown 文件中调用的这些变量?
  • 感谢 ViviG。是的.....我想在一个文件夹中包含的 100 个 csvs [它们都有相同的列名] 上运行一个通用的降价文件 (tes.rmd)。我尝试编写一个 for 循环 [包含在上面的编辑中]m,但不太确定该怎么做....
  • 也许你可以看看passing variables to rmd-files。示例如下。

标签: r csv markdown


【解决方案1】:

你在正确的轨道上。这是passing parameters to rmd-files as solved here的案例:

您的.Rmd 文件需要知道要加载哪个.csv,因此我们将文件名作为参数传递:

analyze.r

your_path <- 'your/path/goes/here'

for (filename in list.files(path=your_path, pattern='*.csv',  full.names=FALSE)) {
  rmarkdown::render(
    './report.Rmd',
    params=list(filename=paste0(your_path, '/', filename)),
    output_file=paste0(your_path, '/', filename, '.html'))
}

report.Rmd:

---
title: "report"
output: html_document
params:
  filename: False
---

```{r setup}
dat <- read.csv(filename, header = TRUE, sep=',')
    
datA <- subset(dat, Version == "A")
datB <- subset(dat, Version == "B")
olsA <- lm(measure ~ mark, data = datA)
olsB <- lm(measure ~ mark, data = datB)
coeffs <- rbind(olsA$coefficients, olsB$coefficients)
r.Squared <- rbind(summary(olsA)$r.squared, summary(olsB)$r.squared)
corA <-cor(datA$measure, datA$mark)
corB <- cor(datB$measure, datB$mark)
```

Your RMarkdown goes here.

说明:

analyse.R 循环遍历所有以*.csv 结尾的文件。 `rmardown.render(..., params=list(filename=filename)) 然后将文件名传递给它呈现的文件。

您的 .Rmd 文件已准备好接受 YAML 标头的参数。使用params$PARAMNAME_SPECIFIED_IN_HEADER 访问参数。

yihui's "R Markdown: The Definitive Guide", 15.3 Knitting with parameters 中有很好的解释(已在上面链接的线程中链接)。

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2017-10-07
    • 2022-01-19
    相关资源
    最近更新 更多