我有一个功能,其中一部分内容如下:
conefor.input <- function(conefor.file, onlyoverall, probmin, index)
{
for(i in 1:l00)
{
cat(paste(conefor.file,
if(onlyoverall=="TRUE")
{onlyoverall<-"onlyoverall"},
distance,
if(probmin=="TRUE")
{probmin<-paste("-pcHeur", min)},
index, sep="\t"),file="conef_command.txt", sep="\n")}
return("conef_command.txt")
}
我的目标是生成100行,其中每个输入由制表符分隔。
当上述两个'if'语句为真时,没有问题。结果是:
conefor.file\tonlyoverall\tdistance\tpcHeur min\tindex
然而,当上面两个'if'语句都是假的时候,我留下了两个标签,其中'onlyoverall'和'pcHeur'就是这样,而我真正想要的是根本没有动作,只有一个标签分开每个论点。
'if'语句为false时的示例:
conefor.file\t\tdistance\t\tindex
'if'语句为假时我想要的是什么:
conefor.file\tdistance\tindex
非常感谢提前
答案 0 :(得分:1)
很难为你的for
循环建议任何形式的矢量化或类似的东西,因为它不清楚(至少对我来说)
迭代之间存在哪些差异。
但是,对于paste
内的cat
语句,您可以使用以下内容
paste(ifelse(onlyoverall,
paste(conefor.file, onlyoverall<-"onlyoverall", sep="\t"),
conefor.file),
ifelse(probmin,
paste(distance, probmin<-paste("-pcHeur", min), sep="\t"),
distance),
index,
sep="\t")
请注意,这会在if
语句之前获取输出,并包含在ifelse
输出中,其中TRUE
和FALSE
例如:
x1 <- x2 <- TRUE
paste(ifelse(x1, paste("A", "B" , sep="#"), "A"), ifelse(x2, paste("C", "D", sep="#"), "C"), "E", sep="#")
# [1] "A#B#C#D#E"
x1 <- x2 <- FALSE
paste(ifelse(x1, paste("A", "B" , sep="#"), "A"), ifelse(x2, paste("C", "D", sep="#"), "C"), "E", sep="#")
# [1] "A#C#E"
x2 <- TRUE
paste(ifelse(x1, paste("A", "B" , sep="#"), "A"), ifelse(x2, paste("C", "D", sep="#"), "C"), "E", sep="#")
# [1] "A#C#D#E"