相关疑难解决方法(0)

在R中编辑函数有哪些方法?

假设我们有以下功能:

foo <- function(x)
{
    line1 <- x
    line2 <- 0
    line3 <- line1 + line2
    return(line3)
}
Run Code Online (Sandbox Code Playgroud)

我们想要改变第二行:

    line2 <- 2
Run Code Online (Sandbox Code Playgroud)

你会怎么做?

一种方法是使用

fix(foo)
Run Code Online (Sandbox Code Playgroud)

并改变功能.

另一种方法是再次编写该函数.

还有另外一种方法吗?(记住,任务是改变第二行)

我想要的是某种方式将函数表示为字符串向量(好吧,字符),然后更改其中一个值,然后再将其转换为函数.

r editing function

47
推荐指数
5
解决办法
3万
查看次数

以编程方式使用dplyr :: case_when参数

我希望能够以编程方式使用dplyr's case_when来替换基本R cut()函数.

目前,case_when可以通过NSE与外部参数一起使用,如:

library(dplyr)
library(rlang)

patterns <- list(
  x <= 2 ~ "<=2",
  x <= 4 ~ "2<->4",
  x > 4 ~ ">4"
 )
 x <- 1:10
 case_when(!!!patterns)
Run Code Online (Sandbox Code Playgroud)

我想要做的是:在变异中使用另一个变量

这个想法会是这样的,虽然我无法弄清楚如何让它工作:

library(dplyr)
patterns_lazy <- list(
  !!quo(x) <= 2 ~ "<=2",
  !!quo(x) <= 4 ~ "2<->4",
  !!quo(x) > 4 ~ ">4"
)
x <- "cyl"
mtcars %>% mutate(ABC = case_when(!!!patterns_lazy))
Run Code Online (Sandbox Code Playgroud)

我希望能够定义我想要过滤的列(在字符串内),并检索这样的东西(这个例子不起作用,因为它是所需的语法):

x <- "cyl"
mtcars %>%
  select(cyl) %>%
  mutate(ABC = case_when(!!!patterns_lazy)) %>%
  head()

  cyl ABC
1   6 …
Run Code Online (Sandbox Code Playgroud)

r dplyr rlang

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

标签 统计

r ×2

dplyr ×1

editing ×1

function ×1

rlang ×1