小编Kev*_*Lee的帖子

与双引号“”相比,何时使用反引号 ' '?

到目前为止我所知道的...

1)当使用包含数字、空格或其他符号的非语法变量/列名称创建小标题时,使用反引号(因为通常只能用字母命名列,对吗?)

 tb <- tibble( 
               ': ) ' = "smile, ' ' = "space", 
               '2000' = "number", "double_quotes" = "normal_text")
Run Code Online (Sandbox Code Playgroud)

但是,当我在这里使用双引号时,小标题仍然由非语法符号/数字组成。

2) 使用双括号时,双引号用于对列名称进行子集化。

  tb[["double_quotes"]]
Run Code Online (Sandbox Code Playgroud)

在这里,当我使用单引号进行子集化时,它仍然有效。

3)当使用 $ 进行子集化时,要选择非语法名称,我必须使用单引号,但在这里,如果我使用双引号进行子集化,它也可以工作

同样,tb$": )"效果也一样好tb$': )'

那么它们实际上可以互换吗?


有趣的是,当我绘制图表时

annoying <- tibble(
  `1` = 1:10,
  `2` = `1` * 2 + rnorm(length(`1`))
)

ggplot(annoying, aes(x = `1`, y = `2`)) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

引用非语法变量时必须使用单引号,否则看起来 ggplot 将 X 和 Y 分别视为 1 和 2 的单点。还有其他类似的案例吗?

r tibble

3
推荐指数
1
解决办法
1497
查看次数

在 R 中使用波浪号 (~) 和句号 (.)

我正在使用 Hadley 的 R4DS 书使用 tidyverse 和 purrr 进行循环,并且对波浪号 ~ 符号和句点符号的确切用法感到有些困惑。

因此,在编写 for 循环或使用 map() 时,您可以使用波浪号代替 ~,而不是写出 function()。

这仅适用于 for 循环吗?

所以如下...

models <- mtcars %>% 
  split(.$cyl) %>% 
  map(~lm(mpg ~ wt, data = .))
Run Code Online (Sandbox Code Playgroud)

此外,我被告知的句点可用于“引用当前列表元素”。但我很困惑这意味着什么。这是否意味着,只有在循环时,句点才表示它指的是正在循环的列表中的元素?它与管道有什么不同?当您使用管道时,您将一行的结果通过管道传输到下一行代码。

所以在上面的例子中, mtcars 是用 split() 管道传输到第二行的,但使用了一个句点。为什么?

下面的案例总结了我的困惑:

x <- c(1:10)

detect(x, ~.x > 5)
Run Code Online (Sandbox Code Playgroud)

使用检测功能,找到第一个匹配,我想我可以使用

detect(x, x >5)
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息,说 x >5 不是函数。所以我加了一个波浪号

detect(x, ~ x > 5)
Run Code Online (Sandbox Code Playgroud)

并得到一个错误说它期望一个 TRUE 或 FALSE,而不是 10。所以如果你添加一个句点

detect(x, ~.x >5) 
Run Code Online (Sandbox Code Playgroud)

突然它可以作为循环使用。那么 ~ 和 . 这里又如何。与简单的管道相比?

for-loop r r-formula

3
推荐指数
1
解决办法
710
查看次数

为什么我不能在函数内使用引号

假设我正在制作一个简单的函数,将输入转换为日期。

**date_test <- function(date) {
  as_date(date)
}**

**date_test(2015-10-10)**
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是,as_date() 必须是一个字符串,所以我不能只输入 2015-10-10。它必须被引号包围。

所以,我可以在每次输入函数时添加引号,就像这样

date_test( "2015-10-10" )

或者我想我可以在函数的代码中包含引号,如下所示

**date_test <- function(date) {
 as_date("date")
}**
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,通过在函数中包含引号,运行该函数时会出现错误。但是如果我只是在输入周围包含引号,如下所示

**date_test <- function(date) {
  as_date(date)
}**

***date_test("2015-10-10")***
Run Code Online (Sandbox Code Playgroud)

代码运行良好。我看不出区别。为什么我不能在函数代码中包含引号?当函数与输入一起运行时,它应该以相同的方式运行,不是吗?最终代码应该读为as_date("input")

r function

0
推荐指数
1
解决办法
41
查看次数

标签 统计

r ×3

for-loop ×1

function ×1

r-formula ×1

tibble ×1