在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
相关产品推荐
相关产品推荐

