2017-12-15 13 views
2

가정하는 룰에 기초하여 R 3 개 벡터의 길이를 등화 I 동일하지 않은 길이 ( 코드 아래 참조) 인 3 개 벡터 x, yz있다. 나는이 마지막 멤버 짧은 벡터의 (여기 xy이)가 동일하지 않은 길이의 때마다 3 개 벡터가 항상 동일한 길이 될 수 있도록 반복을 수있는 방법을

궁금? y

2 회 반복 x2 아래 예에서 예를 들어

, 및 "hi" 3 회 반복한다. 당신의 벡터 (즉, 규칙) 다른 경우 당신이 말하는 때문에

x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4) 
+1

왜 downvoting? 나는 아주 좋은 대답을 얻었다. –

+0

나는 downvote에 충격을 받았다! 누군가가 당신의 질문을 잘못 읽은 것 같습니다. – user138773

답변

3

,이 방법 :

is.df <- function(...) length(unique(lengths(list(...)))) != 1 
    cr <- function(...) c(x, rep(rev(x)[1], max(lengths(list(...))) - length(x))) 

x = c(1, 2) ; y = c("hi") ; z = c(1, 2, 3, 4) 

if(is.df(x, y, z)){ x = cr(x, y, z) ; y = cr(y, x, z) ; z = cr(z, x, y) } 

# x 
# [1] 1 2 2 2 

# y 
# [1] "hi" "hi" "hi" "hi" 

# z 
# [1] 1 2 3 4 
3
foo = function(...){ 
    ml = list(...) 
    L = max(lengths(ml)) 
    lapply(ml, function(x) c(x, rep(tail(x, 1), L - length(x)))) 
} 
foo(x, y, z) 
#[[1]] 
#[1] 1 2 2 2 

#[[2]] 
#[1] "hi" "hi" "hi" "hi" 

#[[3]] 
#[1] 1 2 3 4 
+2

요즘 사람들은 이상한 종류의 예술을 보게됩니다. 이것은 고전적인 미술 동료입니다. 건배. – Masoud