如何在r中使用sym()执行循环?

问题描述 投票:0回答:1

我有一个包含多个连续变量的数据框。我需要生成每个连续变量的对数。每个新变量的名称必须在原变量名后加上_ln组成。我想生成一个循环来完成这项任务。对单个变量执行此操作的代码是:

dat <- data.frame(fev1 = c(3.4, 5.8, 3.1, NA),
                  fvc = c(3.9, 6.2, 4.5, 6.0),
                  rat = c(0.8, 0.91, 0.9, NA),
                  sex = c(0, 1, 0, 1))

var <- sym('fev1')

dat <- 
  dat %>% 
  mutate('{{vari}}_ln':= log({{vari}}))

names(dat)

[1] "fev1"    "fvc"     "rat"     "sex"     "fev1_ln"

我使用以下代码来制作循环:

vars <- c('fev1', 'fvc', 'rat')

purrr::map(dat[vars], ~.x %>% 
             vs <- sym(~.x) %>% 
           mutate('{{vs}}_ln':= log({{vs}})))

然而,并没有成功。错误消息是:

sym()
中的错误: !无法将对象转换为符号。

我怎样才能为这个任务创建一个循环?

谢谢

r loops purrr mutate sym
1个回答
0
投票

我猜你要找的是这个:

library(tidyverse)

setNames(purrr::map_df(dat[vars], log), paste0(vars, "_ln"))

输出:

# A tibble: 4 × 3
  fev1_ln fvc_ln  rat_ln
    <dbl>  <dbl>   <dbl>
1    1.22   1.36 -0.223 
2    1.76   1.82 -0.0943
3    1.13   1.50 -0.105 
4   NA      1.79 NA     

使用映射函数的第一步是弄清楚它映射的内容。对于数据框,它映射到列上。每个

.x
.y
都是一个向量或列表,并且您不会对其中任何一个调用 mutate。

我会给出更具体的建议,但很难说出你的代码中发生了什么,抱歉!!

© www.soinside.com 2019 - 2024. All rights reserved.