我在r中编写以下代码
Candidate <- vector(mode="list", length=3)
names(Candidate)<-c("Survivex","Survivey","Splitx")
Candidate[]<-0
for(i in 1:10)
{
if(i%%2==0)
Candidate["Survivex"]<-i
else if(i%%5==0)
Candidate["Survivey"]<-i
else
Candidate["Splitx"]<-i
}
给出以下结果
Candidate
$Survivex
[1] 10
$Survivey
[1] 5
$Splitx
[1] 9
但是我想要的结果就像
Candidate
$Survivex
[1] 2 4 6 8 10
$Survivey
[1] 5 10
$Splitx
[1] 1 3 7 9
如何修改代码以获得所需的结果
答案 0 :(得分:1)
将新结果连接到现有结果上,而不是替换它们,并且 使用双括号提取而不是单括号子集。例如,
Candidate <- vector(mode="list", length=3)
names(Candidate) <- c("Survivex", "Survivey", "Splitx")
for(i in 1:10)
{
if(i %% 2 == 0)
Candidate[["Survivex"]] <- c(Candidate[["Survivex"]], i)
else if(i %% 5 == 0)
Candidate[["Survivey"]] <- c(Candidate[["Survivey"]], i)
else
Candidate[["Splitx"]] <- c(Candidate[["Splitx"]], i)
}
答案 1 :(得分:1)
您可以使用lapply()
和函数来获取所需的内容。
Candidate <- lapply(1:3, function(j) unlist(do.call(cbind, lapply(1:10, function(i) {
if (i %% 2 == 0) Candidate[[1]] <- i
else if (i %% 5 == 0) Candidate[[2]] <- i
else Candidate[[3]] <- i
if (i %% 5 == 0) Candidate[[2]] <- i
return(Candidate)
}))[j, ]))
names(Candidate) <- nms
结果
> Candidate
$`Survivex`
[1] 2 4 6 8 10
$Survivey
[1] 5 10
$Splitx
[1] 1 3 7 9
数据
Candidate <- vector(mode="list", length=3)
nms <- names(Candidate) <- c("Survivex", "Survivey", "Splitx")