如何定义else语句,else语句可以删除不需要的\ t

时间:2013-04-10 23:31:35

标签: r if-statement

我有一个功能,其中一部分内容如下:

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

非常感谢提前

1 个答案:

答案 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输出中,其中TRUEFALSE

例如:

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"