我当前正在从外部文件读取数据,如下所示:
param_file <- tribble(
~model, ~variable, ~value,
"BAX", "year", "2023",
"BAX", "version", "Saint_XL, Sinner_XY",
"BAX", "metric", "ATE, OFCE",
"LAX", "time", "2024",
"LAX", "model2", "Saint_XX, Sinner_XW",
"LAX", "method", "TEA, CEOF")
然后,我将行分开并筛选出我想要运行的模型,在本例中为 BAX:
param_file2 <- param_file %>%
separate_rows(value, sep = ",") %>%
mutate(value = trimws(value)) %>%
filter(model == "BAX")
看起来像这样:
model variable value
<chr> <chr> <chr>
1 BAX year 2023
2 BAX version Saint_XL
3 BAX version Sinner_XY
4 BAX metric ATE
5 BAX metric OFCE
我想知道是否有一种方法可以自动将变量及其值分配为字符向量:
因此对于 BAX 模型,这些将是:
year <- param_file2 %>% filter(variable == "year") %>% pull(value)
version <- param_file2 %>% filter(variable == "version") %>% pull(value)
metric <- param_file2 %>% filter(variable == "metric") %>% pull(value)
和洛杉矶国际机场模型:
time <- param_file2 %>% filter(variable == "time") %>% pull(value)
model2 <- param_file2 %>% filter(variable == "model2") %>% pull(value)
method <- param_file2 %>% filter(variable == "method") %>% pull(value)
这些给了我想要的答案,但每次我想为每个模型定义一个新变量时,我都需要编写一行新代码。我想知道是否有一种方法可以将变量列中读取的任何内容分配给其相应的值,而不必每次都编写新的代码行。
即如果外部文件中出现 2 个新行,如下所示:
param_file <- tribble(
~model, ~variable, ~value,
"BAX", "pasta", "sauce",
"BAX", "jalapenos", "are, spicy")
然后我想要定义如下的 2 个新变量(无需用新行显式分配它们)...理想情况下使用函数或 purrr 循环,例如:
> pasta
[1] "sauce"
> jalapenos
[1] "are" "spicy"
这个问题是使用基本 R
assign
和purrr::walk
一系列函数的一个很好的例子。这个
tidyverse
策略将会起作用,特别是当 OP 在帖子中标记时purrr
。(我purrr::walk2
在这里使用,因为不会有输出,并且代码将根据需要默默地创建新变量)。创建于 2024-03-20,使用reprex v2.0.2
可能的选择:
创建于 2024-03-20,使用reprex v2.1.0