有这样的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}
通常,这样的功能是通过在执行脚本时读取的配置文件以及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
>
虽然@Len Greski的答案更具技术性,我相信这是一种更专业的方法,但我只想弄清楚如何以一种简单的方式解决我的问题。
我使用了if
语句,而不是使用commnet / uncomment线来避免(或不)运行它们。
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
它不会。