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

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

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

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

Q&A

解決済

1回答

823閲覧

JuliaのDataFramesMetaでERROR: LoadError: syntax: invalid syntax ##

i113

総合スコア74

Julia

Juliaとは、科学技術計算に特化した、高水準・高性能な動的プログラミング言語です。オープンソースとして公表されており、書き易く動きが早いことが特徴です。

0グッド

0クリップ

投稿2022/03/16 09:26

Julia1.7.2で以下のコードを書きましたがエラーが出ます。

Julia

1using CSV, DataFrames, DataFramesMeta 2 3df1 = CSV.read("C:/Users/user/Downloads/DF1.txt", DataFrame, header=1) 4df2 = CSV.read("C:/Users/user/Downloads/DF2.txt", DataFrame, header=1) 5 6for r in eachrow(df1) 7 df_match = @linq df2 |> 8 where(:id1 = r[:id1]) |> 9 where(:C1 = r[:C1]) |> 10 where(:C2 = r[:C2]) |> 11 where(:P1 = r[:P1]) |> 12 where(:P2 = r[:P2]) 13 println(df_match) 14end

Terminal

1ERROR: LoadError: syntax: invalid syntax ##311 = getindex(Core.getfield(#self#, :r), ##311) 2Stacktrace: 3 [1] top-level scope 4 @ c:\Users\user\Documents\sv_match.jl:6 5in expression starting at c:\Users\user\Documents\sv_match.jl:6

##の数字はなぜか毎度違う数字が表示されます。
:の代わりに""で囲むと『ERROR: LoadError: syntax: invalid syntax id1...』と類似のエラーが出ます。
データフレーム自体がうまく読めていないのかとも思いましたが、以下のようにしても異常は見当たりません。

Julia

1using CSV, DataFrames, DataFramesMeta 2 3df1 = CSV.read("C:/Users/user/Downloads/DF1.txt", DataFrame, header=1) 4df2 = CSV.read("C:/Users/user/Downloads/DF2.txt", DataFrame, header=1) 5 6for r in eachrow(df1) 7 println(r[:id1]) 8 println(df2[1,:id1]) 9end

Terminal

1ABBBCBDBEBFB

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

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

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

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

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

guest

回答1

0

ベストアンサー

興味があって調べてみました。その結果,
Julia言語のパッケージにはよくあることですが,最新のDataFramesMeta@linq@where
のマクロが「depricated(廃止?)」になっており,
文法がドラスティックに変わっているようです。
詳しくはreplでusing DataFramesMeta?@linq等で確かめてみて下さい。

  • @linq@chain
  • @where@subset

に変更すべし,となっていますが文法も別言語といえるぐらい別のものに変わっています。
ネットにあるこれまでの日本語情報は全く役に立たなくなることでしょう。

一応,次のような感じでしょうか?

julia

1using CSV, DataFrames, DataFramesMeta 2 3df1 = CSV.read("C:/Users/user/Downloads/DF1.txt", DataFrame, header=1) 4df2 = CSV.read("C:/Users/user/Downloads/DF2.txt", DataFrame, header=1) 5 6for r in eachrow(df1) 7 @chain begin 8 @subset df2 begin 9 :id1 .== r.id1 10 :C1 .== r.C1 11 :C2 .== r.C2 12 :P1 .== r.P1 13 :P2 .== r.P2 14 end 15 println 16 end 17end

追記

すみません。勘違いしていました。@linqはまだ文法としてあるみたいです。

  • r[:id1]ではうまく@linqマクロが認識しないので,r.id1等に変更
  • 複数の要素に等価チェックをするので=ではなく.==を使う

等でOKではないでしょうか?

julia

1for r in eachrow(df1) 2 df_match = @linq df2 |> 3 where(:id1 .== r.id1) |> 4 where(:C1 .== r.C1) |> 5 where(:C2 .== r.C2) |> 6 where(:P1 .== r.P1) |> 7 where(:P2 .== r.P2) 8 println(df_match) 9end

投稿2022/03/16 13:08

編集2022/03/17 03:13
ujimushi_sradjp

総合スコア2179

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

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

i113

2022/03/17 03:21

どうも有り難うございます。お陰様で解決しました。 前から気になっていた言語で、ちょっと機械があったので挑戦してみたのですが、なかなか厳しそうです。 どうして情報が少ないことがネックなのに、自ら蓄積を無効化するのか...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問