基于变量-R注释/取消注释行

时间:2017-12-20 12:46:19

标签: r if-statement comments

拥有这样的R代码:

for (i in 1:length(DV)){names(DV[[i]])<-paste("DV", substr(names(P2[[1+10*(i-1)]]),12,19), sep="_")}
for (i in 1:length(DW)){names(DW[[i]])<-paste("DW", substr(names(P2[[1+10*(i-1)]]), 12,19), sep="_")}

如何根据变量自动评论/取消注释这些行。我想多次重新运行代码,并且对于每次迭代,它应该包括(或不包括)代码的某些行。例如:

var<-TRUE

if (var) then {comment/uncomment lines 39:43}

2 个答案:

答案 0 :(得分:1)

这样的功能通常是通过执行脚本时读取的配置文件以及if()语句而不是注释块来实现的。我们可以将文件读作textConnection()来模拟这个。然后,我们将使用assign()将逻辑值分配给对象,并使用它来控制后续代码块的执行。

# read config file and use it to process data
# 
rawData <- "environment,parameter,value
dev,debug,TRUE
test,debug,TRUE
prod,debug,FALSE
"

configParms <- read.csv(textConnection(rawData),header=TRUE)
# assign the value from the data frame for DEV environment to an object 
assign("debugOn",configParms[configParms$environment =="dev" & 
                             configParms$parameter == "debug","value"])

debugOn

if(debugOn){
     # execute this code block
     message("Entered debug code block")
}
message("passed debug code block")

...和输出:

> debugOn
[1] TRUE
> if(debugOn){
+      # execute this code block
+      message("Entered debug code block")
+ }
Entered debug code block
> message("passed debug code block")
passed debug code block
> 

答案 1 :(得分:0)

虽然@Len Greski的答案更具技术性,我相信这是一种更专业的方法,但我只想弄清楚如何以一种简单的方式解决我的问题。

我没有使用commnet /取消注释线来避免(或不是)运行它们,而是使用if语句。

var<-TRUE

if (var) {
for (i in 1:length(DV)){names(DV[[i]])<-paste("DV", substr(names(P2[[1+10*(i-1)]]),12,19), sep="_")}
for (i in 1:length(DW)){names(DW[[i]])<-paste("DW", substr(names(P2[[1+10*(i-1)]]), 12,19), sep="_")}
}

这就是全部。如果TRUE将完成,如果FALSE则不会。