如何在r中的向量列表中分配多个值?

时间:2018-07-09 11:01:43

标签: r

我在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 

如何修改代码以获得所需的结果

2 个答案:

答案 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")