如果R中的长度(向量)== 1,则复制向量列表中的元素

时间:2013-09-03 20:06:51

标签: r

我有一个简单的向量列表,我想复制每个长度为1的向量的元素。

mylist <- list(c(98, 102), c(175, 177), c(239, 240), c(146, 147, 168, 169
), c(240, 242), c(363, 391), c(144, 146, 146), 197, 126, c(181, 
192))

results  <- lapply(mylist,function(x) if(length(x)==1) rep(x[1],each=2))

我在结果中得到预期的重复,但是如何在结果中保留所有长度> 1的向量?我找不到一个正确的方法来做到这一点。我很确定这很简单......

Thanx帮助

1 个答案:

答案 0 :(得分:2)

您只需添加else语句即可为元素留下更多值

mylist <- list(c(98, 102), c(175, 177), c(239, 240), c(146, 147, 168, 169
), c(240, 242), c(363, 391), c(144, 146, 146), 197, 126, c(181, 
192))

results  <- lapply(mylist,function(x) if(length(x)==1) rep(x[1],each=2) else x)

结果是

[[1]]
[1]  98 102

[[2]]
[1] 175 177

[[3]]
[1] 239 240

[[4]]
[1] 146 147 168 169

[[5]]
[1] 240 242

[[6]]
[1] 363 391

[[7]]
[1] 144 146 146

[[8]]
[1] 197 197

[[9]]
[1] 126 126

[[10]]
[1] 181 192