[英]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.