R:仅当 bool 为 TRUE(条件字符串)时才粘贴()某个字符串?

R: paste() a certain string only if bool is TRUE (conditional strings)?

我有以下代码:

run_name = paste("run", "_", gsub(" ", "_", gsub(":", "", Sys.time())), sep="")
if(ROUNDING) run_name =  paste(run_name, "_R", sep="")

生成类似 run_2021-06-29_101105 的名称,对于 ROUNDING = TRUE 它将添加“_R”:run_2021-06-29_101105_R

我想在 run_name 中包含其他参数,并且可以为每个参数添加一行。但我依稀记得(虽然可能是另一种编程语言)这可以在一行中用这样的东西来实现 (ROUNDING|"R"|"") :

run_name = paste("run", "_", gsub(" ", "_", gsub(":", "", Sys.time())), (ROUNDING|"R"|"") , sep="")

R 中是否有这样的东西(“条件字符串”的语法?!)?

您可以在语句前添加一个对象

 param <- ifelse(ROUNDING,"R","") 

然后将其粘贴到您的 runame:

run_name <- paste("run", "_", gsub(" ", "_", gsub(":", "", Sys.time())),
                  param,
                  sep="")

我实际上会使用与您使用 if/else(因为 ROUNDING 是标量值)而不是 ifelse 相同的方法,而不是一系列pastegsub 语句只使用 format.

run_name <- format(Sys.time(), 'run_%Y-%m-%d_%H%M%S')
if(ROUNDING)  run_name <- paste0(run_name, '_R')

或者如果你需要单线 -

run_name <- paste0(format(Sys.time(), 'run_%Y-%m-%d_%H%M%S'), if(ROUNDING) '_R' else '')

我们也可以使用case_when

library(dplyr)
param <- case_when(ROUNDING  ~"R", TRUE  ~"")