2017-12-15 9 views
2

が想定ルールに基づいて、R 3つのベクトルの長さを等化Iは、不等長(以下のコードを参照)である3つのベクターxy、及びzを有します。私は最後のメンバー短いベクトルのここxy)は、彼らが等しくない長さのものであるときは常に3つのベクトルが常に同じ長さになるように繰り返すことを持っている可能性がどのように

を不思議でしたか?

例えば、2xであり、"hi"yで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