拥有这样的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}
答案 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
则不会。