有人可以帮我看看我哪里出错了吗?我认为在管道函数中使用大括号时,您可以调用该变量,而不必将其括在“”中(即作为字符串)。那么我的函数哪里出了问题:
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 循环
{{...}} 仅适用于 tidyverse 函数,但
substr
不是 tidyverse 函数。