2017-03-09 6 views
1

diff()に類似の機能がありますが、これは違いを見つける代わりに連続する要素を分割していますか?ベクトルの各要素を次の要素で割る

x = c(10,8,4,-1) 
some_function(x) 
# [1] 1.25 2.00 -4.00 
+0

は感謝んが、おそらく利用できるものがあるときも同様に、なぜあなた自身を構築しますか? –

+3

明示的なループはありません。 'tail(x、-1)/ head(x、-1)'を呼び出すか、 '['で直接インデクシングを行います。 – joran

答えて

2

私は基本R.で利用可能なそのようなことはないと思うしかし、あなたは独自のソリューションを作成しようとすることができ、このような

unlist(sapply(2:length(x), function(i) x[i-1]/x[i])) 
# unlist (sort of) takes care of when x has less than 2 elements 

OR

x[-length(x)]/x[-1] 
+1

2番目のアプローチの私の好みの1つは、 'x'の長さが0のときに' sapply'ソリューションが落ちるということです。 – joran

+0

@joranまたは 'sapply(2:1、...)'になる長さ1 – Frank

+0

@フランク、私は 'unlist'がそれを処理すると思います –

0

dplyrで別のオプションとして、使用していますlag

library(dplyr) 
lag(x)/x 

#[1] NA 1.25 2.00 -4.00 

あなたがNAを削除したい場合は、単に

y = lag(x)/x 
y[-1] 

#[1] 1.25 2.00 -4.00 
関連する問題