2014-09-06 110 views
0

這是我的工作代碼:如何讓R在if或ifelse語句中識別一對組合變量?

#create two random numbers and link them to letters 
a1r <- sample(1:4, 1) 
if (a1r==1) { 
a1 <- "B" 
} else { 
if (a1r==2) { 
a1 <- "b" 
} else { 
if (a1r==3) { 
a1 <- "R" 
} else { 
if (a1r==4) { 
a1 <- "r" 
}}}} 

a2r <- sample(1:4, 1) 
if (a2r==1) { 
a2 <- "B" 
} else { 
if (a2r==2) { 
a2 <- "R" 
} else { 
if (a2r==3) { 
a2 <- "R" 
} else { 
if (a2r==4) { 
a2 <- "r" 
}}}} 

#combine the letters 
acom <- c(a1,a2) 

acom 
[1] "R" "b" 

現在的一部分,我不能去上班,我該如何使用變量「ACOM」 if或ifelse語句?我相信我只是格式錯誤的地方。這是我能得到的最接近的。出於測試目的,我跳過了隨機部分和剛剛創建的格式相同的變量:

testvar <- c("A","B") 
ifelse(testvar=="AB", test1 <- 1, test1 <- 2) 

test1 
[1] 2 

如何設置格式要麼是原始數據(保持AB再分配結構),以便它可以很容易地作爲一個變量或如何使用我可以格式化ifelse語句來讀取當前變量嗎?

謝謝!

回答

1

如果你想確保兩個比賽的順序,只需使用

testvar <- c("A","B") 
test1 <- ifelse(all(testvar==c("A","B")), 1, 2) 
+0

謝謝!這讓我走上了正確的道路。 :D – jdfinch3 2014-09-06 03:33:39

1
a1r <- sample(1:4, 1) 
a1 <- c("B","b","R","r")[a1r] # numeric indexing of vector. 

a2r <- sample(1:4, 1) 
a2 <- c("B","R","R","r")[a2r] # same strategy, different vector 

acom <- c(a1,a2) 
if (paste0(acom, collapse="") == "RB") { # original test would always fail  
      test1 <- 1 } else { test1 <- 2 } 
+0

上面已經有了一個可用的結果,但是感謝您指出我手動創建索引的愚蠢錯誤,而不是使用Rs簡單易用的方法 - 節省大量時間! – jdfinch3 2014-09-06 03:34:49