小编Joe*_*Joe的帖子

基于quosure命名新变量

我正在尝试编写一个自定义函数,它将根据预定义变量向量(例如vector_heavy)的值计算新变量,然后根据提供给函数的参数(例如,custom_name)命名新变量.

这个变量命名是我的技能失败的地方.任何帮助是极大的赞赏.

library(tidyverse)

vector_heavy <- quos(disp, wt, cyl)

cv_compute <- function(data, cv_name, cv_vector){
  cv_name <- enquo(cv_name)
  data %>% 
    rowwise() %>% 
    mutate(!!cv_name = mean(c(!!!cv_vector), na.rm = TRUE)) %>% 
    ungroup()
}

d <- cv_compute(mtcars, cv_name = custom_name, cv_vector = vector_heavy)
Run Code Online (Sandbox Code Playgroud)

我的错误消息是:

Error: unexpected '=' in:
"    rowwise() %>% 
    mutate(!!cv_name ="
Run Code Online (Sandbox Code Playgroud)

删除!!之前cv_namemutate()将导致一个函数计算一个字面命名的新变量cv_name,并忽略custom_name我作为参数包含的内容.

cv_compute <- function(data, cv_name, cv_vector){
  cv_name <- enquo(cv_name)
  data %>% 
    rowwise() %>% 
    mutate(cv_name = mean(c(!!!cv_vector), na.rm = TRUE)) %>% 
    ungroup() 
} …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse rlang

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

为什么 complete() 在我的数据中创建重复的行?

当我使用 complete() 函数填充数据中没有案例的行时,我发现它也创建了许多重复的行。这些可以使用 unique() 函数删除,但我想了解如何避免首先生成所有这些额外的行。

library(dplyr)
library(tidyr)

# An incomplete table
mtcars %>% 
  group_by(vs, cyl) %>% 
  count()

# complete() creates a table with many duplicate rows
temp <- 
  mtcars %>% 
  group_by(vs, cyl) %>% 
  count() %>% 
  complete(vs = c(0, 1), cyl = c(4, 6, 8), fill = list(n = 0)) 

unique(temp)
Run Code Online (Sandbox Code Playgroud)

r tidyr

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

如何防止小数位数::百分比加小数

这是几天前开始发生的,它scales::percent会在其标签中添加一个小数位,而且我似乎无法禁用该小数位以在y轴上显示整数值。在此处输入图片说明

library(dplyr)
library(ggplot2)

mtcars %>% 
  count(cyl) %>% 
  mutate(prop = n / sum(n)) %>% 
  ggplot(aes(x = cyl, y = prop)) + 
  geom_point() + 
  scale_y_continuous(labels = scales::percent)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 axis-labels

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

在ggplot2中明确设置面板大小(不仅仅是绘图大小)

是否可以在ggplot中明确设置面板大小(即灰色网格面板)?我想(但是找不到)有一些ggplot扩展允许类似的参数panel.width = unit(3, "in"), panel.height = unit(4, "in").

我已经看到了设置整个绘图大小的解决方案,或者使用egg包来获得多个绘图对齐的解决方案.但没有什么可以让我明确设置面板的大小.

library(dplyr)
library(ggplot2)
library(tibble)

ds_mt <- mtcars %>% rownames_to_column("model")
mt_short <- ds_mt %>% arrange(nchar(model)) %>% slice(1:4)
mt_long <- ds_mt %>% arrange(-nchar(model)) %>% slice(1:4)

p_short <- 
    mt_short %>% 
    ggplot(aes(x = model, y = mpg)) + 
    geom_col() + 
    coord_flip()

p_short
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

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

以编程方式打印我正在使用的 Rproject 的名称

我可以通过假设项目名称是由 here::here() 生成的文件路径中“/”之后的最后一个字符串,以编程方式提取并保存项目名称。

  here::here() %>% stringr::str_extract("[^/]*$")
Run Code Online (Sandbox Code Playgroud)

是否有更安全的方法以编程方式访问项目名称?类似的东西project.name(),这是一个虚构的函数?

r

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

图宽度和图高度不适用于R Markdown的针织字输出

对于pdf图形,fig.width和fig.height块选项仅更改了我的Word文档中2“ x2”图形的比例。我似乎无法控制pdf图形的大小,就像将R Markdown编织成word文档的png图形一样。

---
title: "Controlling PDF figure size in MS Word output"
output: word_document
---

```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.path='02_Figs/',  fig.show='asis', dev = 'pdf', 
include=FALSE, warning=FALSE, message=FALSE)
```

# Fig. 1. Small Plot
```{r include=TRUE, echo=FALSE, fig.width=2, fig.height=3, fig.keep='high'}
with(mtcars, plot(mpg~wt))
```

# Fig. 2. Big Plot
```{r include=TRUE, echo=FALSE, fig.width=4, fig.height=6, fig.keep='high'}
with(mtcars, plot(mpg~wt))
```
Run Code Online (Sandbox Code Playgroud)

markdown r rstudio knitr

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

使用quosure作为by参数连接数据集

我正在尝试编写一个自定义函数,该函数将使用quosures作为参数连接到left_join()函数“ by = c()”部分中的参数,从而将两个数据集连接起来。

这是我目前对该函数的尝试,在“ by = c(!! left_index = !! right_index))”部分失败。left_join期望将这些参数加引号,并且用引用加引号会使!!无效。

join_by_quosure <- function(data, left_index, var_to_impute, right_index){
  require(dplyr)

  left_index <- enquo(left_index)
  right_index <- enquo(right_index)
  var_to_impute <- enquo(var_to_impute)

  left_join(data, 
    data %>% select(!!right_index, !!var_to_impute),
    by = c(!!left_index = !!right_index))
}
Run Code Online (Sandbox Code Playgroud)

我已经在下面编写了该功能如何工作的示例:

# join_by_quosure(data = mtcars, left_index = vs, var_to_impute = mpg, right_index = am)

left_join(mtcars, 
          mtcars %>% select(am, mpg),
          by = c("vs" = "am"))
Run Code Online (Sandbox Code Playgroud)

如果有人能提供有关如何在left_join()函数的“ by = c()”部分中调用quosure的见解,我将不胜感激。

r dplyr

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

在嵌套函数中传递准引用参数

下面我编写了一个snafu()计算新变量的简单函数snafu_var

library(dplyr)

df <- mtcars %>% select(am, cyl) %>% slice(1:5)

snafu <- function(data, var1, var2){
  require(dplyr)

  var1 <- enquo(var1)
  var2 <- enquo(var2)

  data %>% mutate(snafu_var = !!var1 + !!var2)
}

snafu(df, var1 = am, var2 = cyl)
Run Code Online (Sandbox Code Playgroud)

现在我想嵌套snafu()在另一个函数中foobar(),该函数将利用 . 创建的变量snafu()

foobar <- function(data, var1, var2) {
  require(dplyr)

  data <- snafu(data, var1, var2)

  data %>% mutate(foo_var = snafu_var + 1)
}

foobar(df, var1 = am, var2 = cyl)
Run Code Online (Sandbox Code Playgroud)

我在两个问题上苦苦挣扎(可能相关):

1) 中的嵌套函数 …

r dplyr quosure quasiquotes

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

fill 参数使 geom_label() 中的位置参数无效

当我在 geom_label 中使用填充参数时,我的位置参数无效。geom_text() 不会发生这种情况。如何将填充和位置参数与 geom_label() 一起使用?

库(dplyr) 库(ggplot2)

ds_mt <- 
  mtcars %>% 
  group_by(cyl, am) %>% 
  summarise(mpg = mean(mpg)) %>% 
  ungroup() %>% 
  mutate_at(vars(cyl, am), funs(as.factor)) 

ds_mt %>% 
  ggplot(aes(x = cyl, fill = as.factor(am), y = mpg, label = am)) + 
  geom_col(position = position_dodge()) + 
  geom_label(position = position_dodge(width = .9))

# Adding fill argument to geom_label() nullifies the position argument
ds_mt %>% 
  ggplot(aes(x = cyl, fill = as.factor(am), y = mpg, label = am)) + 
  geom_col(position = position_dodge()) + 
  geom_label(fill = "white", …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何在 Mac 上使用 ln -s 在 R 版本之间切换?

RStudio 支持文章称,如果您“直接使用更新 R.framework/Versions/Current 目录别名ln -s” ,您可以在 Mac 上切换不同的 R 版本

您究竟如何使用ln -sR 版本之间的更改?

当我输入终端时,ls -l /Library/Frameworks/R.framework/Versions/我看到:

total 0
drwxrwxr-x  6 root  admin  192 Jan 15 09:04 3.3
drwxrwxr-x  6 root  admin  192 Jun  5 16:36 3.5
drwxrwxr-x  3 root  admin   96 Jun  5 16:36 3.6
lrwxr-xr-x  1 root  admin    3 Jun  5 16:36 Current -> 3.5
Run Code Online (Sandbox Code Playgroud)

但我不确定如何ln -s用于在这些 R 版本之间进行切换。我目前已通过重新下载 3.5 从 3.6“切换”到 3.5。我想避免这种做法。

在我的终端中,我输入了rm /Library/Frameworks/R.framework/Versions/Current删除现有 Current.txt 的命令。然后在单独的尝试中我输入了ln …

r

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

标签 统计

r ×10

dplyr ×3

ggplot2 ×3

axis-labels ×1

knitr ×1

markdown ×1

quasiquotes ×1

quosure ×1

rlang ×1

rstudio ×1

tidyr ×1

tidyverse ×1