花括号 - 为什么这个函数不接受不带引号的变量

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

有人可以帮我看看我哪里出错了吗?我认为在管道函数中使用大括号时,您可以调用该变量,而不必将其括在“”中(即作为字符串)。那么我的函数哪里出了问题:

library(tidyverse)
dat <-  structure(list(id = 1:6, 
                       var_1 = c("1,1,-11000", "1,1,1", "0,0,0", "1,1,0", "1,1,1", "1,1,1"), 
                       var_2 = c("0,0,-13000", "0,0,0", "-13000,-13000,-13000", "6,4,-13000", "0,0,0", "0,0,0"), 
                       var_3 = c("24,7,-13000", "0,0,0", "-13000,-13000,-13000", "0,0,-13000", "0,0,0", "0,0,0")), 
                  row.names = 1:6, class = "data.frame")

# Separate to wide and convert to long in one step
split_to_long <-  function(col){
  i <-  substr({{col}}, 5, 5)
  temp <-  dat |>
    select("id", {{col}}) |>
    separate_wider_delim({{col}}, ",", too_few = "align_start",
                         names = c(paste0({{col}},"_1"),
                                   paste0({{col}},"_2"),
                                   paste0({{col}},"_3"))) |>
    pivot_longer(2:4,
                 names_to = "visit",
                 values_to = paste0("var_", i),
                 names_prefix = paste0("var_", i, "_"))
  temp
}

# This works
split_to_long("var_1")

# But this doesn't
split_to_long(var_1)

这来自我发布的另一个问题: 如何用 purrr::map 替换这个 for 循环

r function rlang
1个回答
0
投票

{{...}} 仅适用于 tidyverse 函数,但

substr
不是 tidyverse 函数。

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