小编tho*_*hal的帖子

在新环境中的 RMarkdown 地图中使用glue

考虑以下Rmarkdown文档:

\n
---\ntitle: "Environments"\nauthor: "Me"\ndate: "2023-01-13"\noutput: html_document\n---\n\n```{r setup}\nlibrary(glue)\nlibrary(purrr)\n```\n\n```{r vars}\na <- 1\nx <- list("`a` has the value: {a}")\n```\n\n```{r works}\nglue(x[[1L]])\n```\n\n```{r does-not-work, error = TRUE}\nmap_chr(x, glue)\n```\n
Run Code Online (Sandbox Code Playgroud)\n

当使用RStudio\'s knit按钮时,一切都像魅力一样工作,输出如下:

\n

渲染的 HTML 文件,其中所有块都正确渲染

\n

但是,如果我尝试使用自己的环境调用自己的渲染,则会失败:

\n
---\ntitle: "Environments"\nauthor: "Me"\ndate: "2023-01-13"\noutput: html_document\n---\n\n```{r setup}\nlibrary(glue)\nlibrary(purrr)\n```\n\n```{r vars}\na <- 1\nx <- list("`a` has the value: {a}")\n```\n\n```{r works}\nglue(x[[1L]])\n```\n\n```{r does-not-work, error = TRUE}\nmap_chr(x, glue)\n```\n
Run Code Online (Sandbox Code Playgroud)\n

渲染的 HTML 文件,其中第二个块产生错误

\n

所以显然glue在使用时会在环境中绊倒purrr::map

\n

我如何render使用自己的环境进行调用而不生成此错误?理想情况下,我不想改变它Rmarkdown本身。

\n

更新

\n

有趣的是,如果我把glue自己的function东西包裹起来,工作就会再次顺利:

\n
```\nglue …
Run Code Online (Sandbox Code Playgroud)

environment r r-markdown purrr r-glue

10
推荐指数
1
解决办法
385
查看次数

javascript如何解析参数?

我是一个陌生的人JavaScript,来自不同的编程背景,我很难理解如何JavaScript知道如何解析传递给函数的参数。

让我们看一个简单的例子。从jQuery文档中 .on,我看到2个不同的签名:

.on(事件[,选择器] [,数据],处理程序)

.on(事件[,选择器] [,数据])

但是,以下代码段可以产生完全有效的代码,并且可以完成预期的工作:

$(function() {
  let dat = {a: 1, b: 2}
  $('#do').on('click', dat, function(evt) {
    alert(evt.data.b);
  });
  $('#do2').on('click', function(evt) {
    alert("click");
  });
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="do">
  Click!
</button>
<button id="do2">
  Click!
</button>
Run Code Online (Sandbox Code Playgroud)

如何JavaScript“知道” dat第一种情况下的数据(而不是selector)?显然,两个签名都没有位置匹配吗?那么,它在内部如何工作?如何在自己的功能中使用此模式?

javascript

8
推荐指数
2
解决办法
105
查看次数

使用 dplyr 将函数应用于 data.frame 中的一行

在基地R我会做以下事情:

d <- data.frame(a = 1:4, b = 4:1, c = 2:5)
apply(d, 1, which.max)
Run Code Online (Sandbox Code Playgroud)

随着dplyr我可以做到以下几点:

library(dplyr)
d %>% mutate(u = purrr::pmap_int(list(a, b, c), function(...) which.max(c(...))))
Run Code Online (Sandbox Code Playgroud)

如果d我需要指定另一列,但我希望它可以使用任意数量的列。

从概念上讲,我想要类似的东西

pmap_int(list(everything()), ...)
pmap_int(list(.), ...)
Run Code Online (Sandbox Code Playgroud)

但这显然行不通。我将如何规范地解决这个问题dplyr

r dplyr purrr tidyverse

8
推荐指数
1
解决办法
135
查看次数

将表达式传递给函数以在 data.table 中进行评估以允许内部优化

预读

我在 SO 上浏览了一些材料:

在得到我以前的问题的完美答案后,我试图一劳永逸地了解如何规范地处理data.tables函数。

潜在问题

我最终想要的是创建一个函数,该函数将一些R表达式作为输入并在 a 的上下文中对它们进行评估data.table(在 theijpart 中)。引用的答案告诉我,get/eval/substitute如果我的输入变得比单列更复杂,我必须使用某种组合(在这种情况下,我可以接受..stringwith = FALSE方法 [1])。

我的真实数据相当大,所以我担心计算时间。

最终,如果我想拥有完全的灵活性(即传递表达式而不是裸列名称),我明白我必须采取一种eval方法:

代码讲了一千个字,所以让我们来说明我到目前为止的发现:

设置

library(data.table)
iris <- copy(iris)
setDT(iris)
Run Code Online (Sandbox Code Playgroud)

主力功能

my_fun <- function(my_i, my_j, option_sel = 1, my_data = iris, by = NULL) {
   switch(option_sel,
      {
         ## option 1 - base R deparse
         my_data[eval(parse(text = deparse(substitute(my_i)))), 
                 eval(parse(text …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
117
查看次数

如何在字符串中使用 unicode

我知道我可以使用\\U前缀来编码 unicode 字符:

\n
cat("\\U00DF", "\\n")\n# \xc3\x9f\n
Run Code Online (Sandbox Code Playgroud)\n

但我该如何在更长的字符串中使用它呢?

\n
cat("Stra\\U00DFe", "\\n")\n# Stra\xe0\xb7\xbe\n
Run Code Online (Sandbox Code Playgroud)\n

我真的需要吗paste沿着unicode“断点”串起来吗?

\n
cat(paste0("Stra", "\\U00DF", "e"), "\\n")\n# Stra\xc3\x9fe\n
Run Code Online (Sandbox Code Playgroud)\n

我想我只见树木不见森林,所以任何暗示都值得高度赞赏吗?

\n

unicode r

7
推荐指数
1
解决办法
118
查看次数

映射颜色时,将多列传递给绘图中的自定义数据

如果我不将任何值映射到 color以下代码,则可以顺利运行:

\n
library(tidyverse)\nlibrary(plotly)\n\nset.seed(123)\nd <- tibble(x = 1:10, \n            g = gl(2, 5), \n            y = sample(100, 10), \n            L = LETTERS[1:10], l = letters[1:10])\n\nplot_ly(d) %>%\n  add_bars(x = ~ x, y = ~ y, customdata = ~ map2(l, L, list),\n           hovertemplate = "%{customdata[0]}:%{customdata[1]}")\n
Run Code Online (Sandbox Code Playgroud)\n

绘制条形图,其中悬停信息正确显示为:A

\n

然而,当我尝试为条形提供不同的颜色时,数据的(内部)形状发生变化,并且 R 抱怨形状不匹配:

\n
plot_ly(d) %>%\n  add_bars(x = ~ x, y = ~ y, color = ~ g, customdata = ~ map2(l, L, list),\n           hovertemplate = "%{customdata[0]}:%{customdata[1]}")\n
Run Code Online (Sandbox Code Playgroud)\n
\n
Error in `recycle_columns()`:\n! Tibble columns …
Run Code Online (Sandbox Code Playgroud)

r plotly

7
推荐指数
2
解决办法
350
查看次数

为什么我们不能使用.作为%>%的匿名函数中的参数

有人可以向我解释为什么以下两条指令有不同的输出:

library(plyr)
library(dplyr)
ll <- list(a = mtcars, b = mtcars)
# using '.' as a function parameter
llply(ll, function(.) . %>% group_by(cyl) %>% summarise(min = min(mpg)))
# using 'd' as function parameter
llply(ll, function(d) d %>% group_by(cyl) %>% summarise(min = min(mpg)))
Run Code Online (Sandbox Code Playgroud)

前一种情况显然甚至没有评估(我通过拼写错误来判断summarise:不会 抛出错误).llply(ll, function(.) . %>% group_by(cyl) %>% sumamrise(min = min(mpg)))

因此,这与范围规则和评估事项有关,但我真的想了解发生了什么,以及为什么会发生这种情况?我.经常使用匿名函数作为参数,我很困惑地看到结果.

长话短说,为什么不.配合%>%

r plyr dplyr

6
推荐指数
2
解决办法
177
查看次数

使用动态数量的ui元素更新模块中的输入

我想编写一个动态数字n的模块,比如UI元素.我发现input插槽与当前的元素数量对应,但是在会话期间选择的最大数量:

library(shiny)
library(plyr)

testUI <- function(id) {
  ns <- NS(id)
  uiOutput(ns("container"))
}

test <- function(input, output, session, numElems) {
   output$container <- renderUI(do.call(tagList, llply(1:numElems(), function(i) 
            selectInput(session$ns(paste0("elem", i)), 
                        label = i, choices = LETTERS[sample(26, 3)]))))
   getNames <- reactive(reactiveValuesToList(input))
   list(getNames = getNames)
}

ui <- fluidPage(numericInput("n", "Number of Elems", value = 3), 
                testUI("column1"), 
                verbatimTextOutput("debug"))

server <- function(input, output, session) {
   getN <- reactive(input$n)
   handler <- callModule(test, "column1", getN)
   output$debug <- renderPrint(handler$getNames())
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

如果您在数字输入字段,从改变元素的个数3来 …

r shiny

6
推荐指数
1
解决办法
474
查看次数

如何更改 geom_text 后的字体大小

如果我想改变 a 的字体大小,geom_text我可以使用该size参数。但是,如果我有一个ggplot由其他人生成的对象(例如在函数中)并且我想随后更改字体大小怎么办?(我可以重写该函数并允许使用额外的大小参数,但我想避免这种情况)。

我玩过theme(text = element_text(size = 20)),但这改变了每个文本,但是geom_text?我还尝试用新geom_text层替换相应层。但是,由于在外部函数调用中, 的数据参数已geom_text更改,因此我收到有关缺少美观性的错误。

代码

library(ggplot2)
functionICannotControl <- function() {
   mdat <- mtcars
   mdat$cyl2 <- LETTERS[mdat$cyl]
   ggplot(mtcars, aes(x = hp, y = mpg)) + geom_text(aes(label = cyl2), data = mdat)
}
(bp <- functionICannotControl())

## changed only other text elements
bp + theme(text = element_text(size = 20))
## gives an error
bp2 <- bp
bp2$layers[[1]] <- geom_text(size = 20) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

6
推荐指数
1
解决办法
748
查看次数

通过正则表达式根据字符串中的位置替换子字符串

假设我的字符串中有一个特定的模式,该模式出现了已知的次数 ( n),并且我们不想对字符串的其余部分(特别是这些模式之间的字符串)做出任何假设。

此外,我有一个长度向量nsf例如),我想用相应的元素修改模式的每次出现。因此,对于每场比赛,我想知道比赛已经发生了多少次?

我可以想到以下解决方案:

library(stringr)
sf <- letters[4:1]
ss <- "fdskjhf xx sd ss xx wwwe xx ss  xx sdsd"
#              ^^ 1st   ^^ 2nd  ^^ 3rd ^^ 4th
# add:         _sf[1]   _sf[2]  _sf[3] _sf[4]
# that is:     xx_d     xx_c    xx_b   xx_a


## add _sf[i] to the ith occurence of "xx" in ss
goal <- "fdskjhf xx_d sd ss xx_c wwwe xx_b ss  xx_a sdsd"

my_replacer_factory <- function(sf, start = 0) {
  cnt <- …
Run Code Online (Sandbox Code Playgroud)

regex r stringr

5
推荐指数
1
解决办法
87
查看次数