簡體   English   中英

R for 循環中的 if else 語句

[英]R An if else statement inside a for loop

我有一個由 3 列組成的數據表,分配給變量 g。

g
#      V1   V2 V3
# [1,]  1  Yes  3
# [2,]  4   No  6
# [3,]  7   No  9
# ...

我試圖通過檢查 g[,2] 中的值是“是”還是“否”來創建一個列表 m,然后將一些字符串粘貼到 m 中。

m <- for(i in 1:nrow(g)){
  if(g[i,2]=='No'){
    paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n")
  } else if(g[i,2]=='Yes'){
    paste0("GHI", g[i,1], "DEF", g[i,2], "ABC", g[i,3],"\n")
  } else {NULL}
}

m
# NULL

但是,當我嘗試返回 m 時,它只返回 NULL。 我希望我看起來像這樣:

m
# ABC1DEFYesGHI3
# GHI2DEFNoABC9

有人可以指出我在這里做錯了什么嗎? 非常感謝!

for循環在 R 中不返回任何內容。通常,您希望更新另一個變量,以便在for循環后繼續使用。 例如:

m <- "intialize" # initialize, sometimes better as just `list()`
for(i in 1:nrow(g)){
  if(g[i,2]=='No'){
    # paste into position i of vector m
    m[i] <- paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n") 
  } else if(g[i,2]=='Yes'){
    # paste into position i of vector m
    m[i] <- paste0("ABC", g[i,1], "DEF", g[i,2], "GHI", g[i,3],"\n")
  } else {
  NULL
  }
}
m
> ... 

您可以使用 print() 函數和 capture.output() 如下

#generate data, I used 3 lists, which in your case are 3 columns
col1<-c("Yes","No","Maybe","Yes","No")
col2<-1:5
col3<-5:1
data<-cbind(col1,col2,col3)
#check the data table
#     col1    col2 col3
#[1,] "Yes"   "1"  "5" 
#[2,] "No"    "2"  "4" 
#[3,] "Maybe" "3"  "3" 
#[4,] "Yes"   "4"  "2" 
#[5,] "No"    "5"  "1" 
#here is the function for your transformation
m<-function(col1,col2,col3){
  for (i in 1:5){
  if (col1[i]=="Yes") {res=paste("ABC",col2[i],"DEF",col3[i],sep="")
  print(paste(i, res))}
  else if(col1[i]=="No") {res=paste("DEF",col2[i],"ABC",col3[i],sep="")
  print(paste(i, res))}
  }
}
#capture the results 
res<-capture.output(m(data[,"col1"],data[,"col2"],data[,"col3"]))
#show results 
as.data.frame(res)
#               res
#1 [1] "1 ABC1DEF5"
#2 [1] "2 DEF2ABC4"
#3 [1] "4 ABC4DEF2"
#4 [1] "5 DEF5ABC1"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM