2013-04-10 23 views
1

我有一個函數,其中一個部分的內容如下:如果else語句如何定義由此else語句可以除去不需要的噸

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 

然而,當「如果」上面的聲明均屬不實兩個,我留下了兩個標籤,其中「onlyoverall」和「pcHeur」本來,然而,我真正想要的是根本沒有行動,只有一個標籤分隔每個參數。

例如,當 '如果' 聲明均屬不實:

conefor.file\t\tdistance\t\tindex 

我想什麼時候 '如果' 聲明均屬不實:

conefor.file\tdistance\tindex 

提前感謝

+0

原諒我錯過了可能很明顯的事情,但我無法發現迭代之間的任何區別。一個迭代與另一個迭代有什麼不同? (即,沒有提到'我'或任何類似的東西,我可以注意到)。 – 2013-04-10 23:49:01

+1

涉及酷刑邏輯的問題應附帶測試數據。 – 2013-04-11 01:02:14

+0

@Dwin,就邏輯部分而言,在這個問題中沒有任何東西,這是數據相關的,只是一堆變量名。當然,函數本身是一個不同的故事 – 2013-04-11 02:38:44

回答

1

很難建議任何形式的向量化或類似的for循環,因爲它不清楚(至少對我來說) 迭代之間有什麼區別。

然而,作爲的catpaste語句中,可以使用以下代替

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" 
+0

感謝里卡多 - 這是訣竅! – SilvanD 2013-04-11 01:41:33

+0

@DanielleRappaport,沒問題,很樂意幫忙。雖然這個「循環」似乎仍然值得懷疑。你確定它正在做你期望的嗎? – 2013-04-11 01:53:52