You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中用case_when()结合glue()按变量值导文件遇语法问题求助

R中case_when()结合glue()导入文件的问题解决

问题描述

想要在R中通过case_when()结合glue(),根据变量值动态导入对应文件:

  • 定义变量BP-data(可取值"SJ"、"SR"、"test")和test-tables
  • 当BP-data为"test"时,导入test-tables指定的文件;否则导入BP-data对应的文件
    但代码执行时,即使满足第一个条件仍进入else分支,触发文件不存在的错误,同时不确定case_when()是否支持这种用法。

变量定义代码

# 变量定义:允许取值为"SJ", "SR", "test"
BP-data <- "test"
# 如果使用测试数据,需指定该变量;非测试数据时该变量取值不影响
test-tables <- "SR"

问题代码

BU_Table <- case_when(BP-data == "test" ~ 
read.delim(glue("~//R5_SSO//Tables//{test-tables}_BU_Table.txt"),sep="\t",header=TRUE,stringsAsFactors=FALSE), 
TRUE ~ 
read.delim(glue("~//R5_SSO//Tables//{BP-data}_BU_Table.txt"),sep="\t",header=TRUE,stringsAsFactors=FALSE))

错误信息

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file '//Tables//test_BU_Table.txt': No such file or directory

解决步骤

1. 修正变量命名(核心问题)

R的变量名不能包含连字符-,否则会被解析为减法运算。比如BP-data会被当成BP - data,test-tables会被当成test - tables,这直接导致条件判断错误,且glue拼接路径时生成无效内容。

将变量名改为下划线风格:

BP_data <- "test"
test_tables <- "SR"

2. 修正case_when()的条件判断

修正变量名后,确保条件判断逻辑正确。同时注意case_when()的语法规则:每个条件由条件 ~ 结果组成,多个条件用逗号分隔。

3. 修正后的完整代码

library(dplyr)
library(glue)

# 修正后的变量定义
BP_data <- "test"
test_tables <- "SR"

# 动态导入文件
BU_Table <- case_when(
  BP_data == "test" ~ read.delim(
    glue("~//R5_SSO//Tables//{test_tables}_BU_Table.txt"),
    sep = "\t",
    header = TRUE,
    stringsAsFactors = FALSE
  ),
  TRUE ~ read.delim(
    glue("~//R5_SSO//Tables//{BP_data}_BU_Table.txt"),
    sep = "\t",
    header = TRUE,
    stringsAsFactors = FALSE
  )
)

额外说明

  • case_when()支持返回数据框类型的结果,只要每个分支返回的结果结构一致即可。
  • 若路径中的~解析有问题,可改用绝对路径(如C://R5_SSO//Tables//...)或用normalizePath()处理路径。

内容的提问来源于stack exchange,提问作者nps-randy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:13:23