2016-11-12 12 views
-1

Rで直線的に補間しようとしています MATLABの擬似コードはu = interp1(u, linspace(1, numel(u), numel(u)-1));です。この点は、点がドメイン外にある場合は外挿してNaNを返します(デフォルトはhere)。R interp1をMATLABと同様に使用するには?

  • approx rule=1ので、私はちょうどunsuccessufully y <- x

    interp1(x, y, xi, method = "linear") 
    

    その最小限のコードを聞かせて、私はMATLABで必要とされていないものを二interp1パラメータについて確認していないMATLABの擬似コード

に相当します例(実際のものは> 500 k点を持っているので線形が働く)とその出力は上に

List of 2 
$ : num [1:3] 1 2 3 
$ : num [1:2] 1 2 
num [1:2] 0 1 
Error in interp1(x, y, xi, method = "linear") : 
    Points 'xi' outside of range of argument 'x'. 
Execution halted 

library("pracma") # http://finzi.psych.upenn.edu/library/pracma/html/interp1.html 

files <- vector("list", 2) 
files[[1]] <- c(1,2,3) 
files[[2]] <- c(1,2) 
str(files) 

# Wanted, MATLAB: u = interp1(u, linspace(1, numel(u), numel(u)-1)); 

xi <- seq(0,1, len = length(files[[1]]) - 1) 
x <- files[[1]] 
y <- files[[1]] 
str(xi) 

files[[1]] <- interp1(x, y, xi, method = "linear") 

str(files) 

私はスレッドusing interp1 in R for matrixを知っていますが、私はマトリックスを持っていません。

入力:c(1,2,3)
予想される出力:[1:2]のデータ構造

R:3.3.1
OS:Debianの8.5

+0

あなたは '?approx'を試しましたか? – baptiste

+0

@baptisteはい、最初に試しましたが、MATLAB擬似コードにもっとも近いところで発音するため、 'interp1'に戻りました。 –

+0

MATLABはどのように外挿するのですか? '?approx'の' rule'の説明は、 'rule = 2'を設定すると、最も近いデータ極値で値を取得しますが、最も近い2つの点から直線的に外挿するような好きなことをしたい場合、 ... –

答えて

1

あなたが外挿にNA値を得るために喜んでいる場合は、as is the default for linear interpolation/extrapolation in interp1 、その後、approx()が正常に動作します:

files <- list(1:3,1:2) 
xi <- seq(0,1, len = length(files[[1]]) - 1) 
x <- files[[1]] 
y <- files[[1]] 
a <- approx(x,y,xi) 

あなたはこれだけの2要素ベクトルを望んでいたと述べましたおそらくあなただけの出力y値をしたい:

a$y 
## [1] NA 1 

これは間違っているようですが、あなたが実際に提起質問に対する正しい答えであることがあります。 xyの両方にfiles[[1]]を使用しました。したがって、approx()は、入力が1〜3の範囲でy = xを返し、それ以外の場合はNAを返します。この場合xi[0 1]ので、最初の要素は

PS Iは、MATLABの構文に類似するためpracmaを使用したい理解することができます...設けられたX/Yデータの範囲外であるが、 - pracmaが高いものの - 品質と広く使用される - ベースのR関数は、さらに広く使用されている/徹底的にテストされて...

+0

ありがとうございます! ----より正確に出力を調べることでシンタックスを得ました。実際には2のリストを返します。これはMATLABとはかなり異なっています。 –

関連する問題