gpt4 book ai didi

Markdown : writing inline dplyr code if column names have spaces defined with backticks

转载 作者:行者123 更新时间:2023-12-04 08:51:07 27 4
gpt4 key购买 nike

问题

当我 filter() 时,我的内联代码块中断或 select()一个包含空格的列名,我通常会在 dplyr 中用反引号定义。

示例数据

    ```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(dplyr)
library(knitr)
library(lazyeval)

df <- structure(list(1:3, 2:4), .Names = c("a", "b"), row.names = c(NA, -3L), class = "data.frame")

df <- df %>% select(`a a`=a, `b b`=b)
```

内联代码块

我正在尝试类似 `r df %>% filter(`a a` == 1) %>% select(`a a`) %>% as.numeric()` ,但我收到以下错误:
    Error in base::parse(text = code, keep.source = FALSE) : <text>:2.0: unexpected end of input 1: df %>% filter( ^ Calls: <Anonymous> ... inline_exec -> withVisible -> eval -> parse_only -> <Anonymous>

...出于非常明显的原因(反引号结束了内联代码块)。我可以在 intext 计算之后重命名代码块中的列(我正在为表格格式化它们),但不得不将其分解会令人沮丧。

昂贵的 lazyeval解决方案

这解决了问题 r df %>% filter_(interp(~ which_column == 1, which_column = as.name("a a"))) %>% select_(as.name("a a")) %>% as.numeric() ,但必须有更好的方法。

最佳答案

我不确定您是如何运行的 - 在这里我提供有关 knitr 的答案.

这种情况没有简单的解决方案,在 block 内移动一些代码的解决方法(如评论之一中所建议的)可能是要走的路。

为了将来的引用和进一步的了解,我仍然会分享潜在的问题和替代解决方案。

请注意 knitr inline.code 使用以下模式(假设您使用的是 Rmarkdown 格式):

knitr::all_patterns$md$inline.code
[1] "`r[ #]([^`]+)\\s*`"

现在函数 knitr:::parse_inline通过调用 stringr::str_match_all 进行匹配,它将检测一个或多个非反引号 ( [^`]+ ) 的模式,后跟零个或多个空间类元素 ( \\s* ),后跟一个反引号。

所以它将在 `r 之后的第一个反引号处结束,或多或少无论如何。这是有道理的,因为输入行在 parse_inline 中折叠。并且实际上可能有多个内联代码语句和包含反引号的纯文本在结果字符串中。

但是,如果您将自己限制在某些约定中,则可以修改模式以不同方式检测内联代码段的结尾。下面我假设我总是在一段内联代码之后换行,例如关注您的 setup block 我只有以下内容:
Hello there.

`r DF %>% filter(`a a` == 1) %>% select(`a a`) %>% as.numeric()`

This should read 1 above here.

然后我可以按以下方式编织,修改模式以获取所有内容,直到一个反引号,然后是一个换行符:
library(knitr)
opts_knit$set('verbose' = TRUE)
knit_patterns$set(all_patterns$md)
inline.code.2 <- "`r[ #](.+)\\s*`\n"
knitr::knit_patterns$set(inline.code = inline.code.2)

knit2html("MyRmarkdownFile.rmd")
browseURL("MyRmarkdownFile.html")

不过,为这种模式找到适用于所有人的一般规则似乎是不可能的。

关于 Markdown : writing inline dplyr code if column names have spaces defined with backticks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com