質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1876閲覧

python実行が正常に動作したりしなかったりする

take2123

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/06 13:09

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
pythonからRを呼び出してコードを実行したいが、正常に動作するときと、想定する結果が出力されない場合があります。うまくいかない時も、再度実行したら正常に動作することがあり、原因と解決方法を教えて頂きたいです。

やりたいこととしては、pythonからRに行列を2つ渡し、その行列を入力としてRのkNN法のライブラリFNNを用いて近傍点との距離(下記ソースでいうX)をRからpythonに引き渡したいです。
下記ソースの前半は、こちらのサイト(http://dotnsf.blog.jp/archives/1060215059.html)から引用していますが、引用しているソースはRへの引き渡しの確認用であり、躓いているところは最後の4行のみです。

該当のソースコード

python

1import numpy 2import pandas 3import pylab 4import pyper 5 6n = 200 7# データの生成 8score_x = numpy.random.normal(171.77, 5.54, n) 9score_y = numpy.random.normal(62.49, 7.89, n) 10 11score_x.sort() 12score_x = numpy.around(score_x + numpy.random.normal(scale=3.0, size=n), 2) 13score_y.sort() 14score_y = numpy.around(score_y + numpy.random.normal(size=n), 2) 15 16# 散布図を描く 17pylab.scatter(score_x, score_y, marker='.', linewidths=0) 18pylab.grid(True) 19pylab.xlabel('X') 20pylab.ylabel('Y') 21 22# Rで回帰分析 23df = {'X': score_x, 'Y': score_y} 24df = pandas.DataFrame(df) 25 26r = pyper.R(use_pandas='True') 27 28# Rへデータ渡す 29r.assign('df', df) 30 31# Rのコマンド実行 32print(r("summary(df)")) 33r("result <- lm(Y~X, data=df)") 34print(r("summary(result)")) 35 36#予測区間と信頼区間を算出するため 37new_x = numpy.arange(155, 190, 0.1) 38new_df = pandas.DataFrame({'X': new_x}) 39r.assign('new', new_df) 40 41# 予測区間(R) 42r("prediction <- predict(result, new, interval='prediction')") 43# 信頼区間(R) 44r("confidence <- predict(result, new, interval='confidence')") 45 46# Python側にとってくる 47lm_result = r.get('result$fitted.values') 48prediction = pandas.DataFrame(r.get('prediction')) 49confidence = pandas.DataFrame(r.get('confidence')) 50 51# 回帰直線, 予測区間, 信頼区間を描く 52pylab.plot(score_x, lm_result, 'r', linewidth=2) 53 54pylab.plot(new_x, prediction[1], 'g', linewidth=1) 55pylab.plot(new_x, prediction[2], 'g', linewidth=1) 56 57pylab.plot(new_x, confidence[1], 'c', linewidth=1) 58pylab.plot(new_x, confidence[2], 'c', linewidth=1) 59 60pylab.show() 61 62#ここから下が実行したい場所 63r('library(FNN)') 64r("X <- knnx.dist(prediction,confidence,3)") 65Z = r.get("X") 66Z = r.get("X")

試したこと

ソースの最後に"Z = r.get("X")"を2回書いていますが、これま誤記ではなく、2回書かないと全くZにXが格納されません。連続して成功するときもあれば、全く成功せず、pythonを再起動しなおす場合もあります。
成功する場合もあるため、ライブラリFNNのインストールは問題ないと考えております。
しかし、前半部分のRとの連携は常に正常に行えているため、"r('library(FNN)')"が正常に行えていない可能性もあります。

補足情報(FW/ツールのバージョンなど)

python3.6
R3.3
コードの実行はanaconda3インストール時に付属しているspyder3を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ZがNoneで返ってくるのなら。

python

1Z = None 2while Z is None: 3 Z = r.get("X")

投稿2018/03/06 14:40

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問