2017-05-21 3 views
2

die folgende Tabelle vor:varargs ist, die Schlüssel Fehler in Julia

julia> using RDatasets, DataFrames 
julia> anscombe = dataset("datasets","anscombe") 
11x8 DataFrame 
| Row | X1 | X2 | X3 | X4 | Y1 | Y2 | Y3 | Y4 | 
|-----|----|----|----|----|-------|------|-------|------| 
| 1 | 10 | 10 | 10 | 8 | 8.04 | 9.14 | 7.46 | 6.58 | 
| 2 | 8 | 8 | 8 | 8 | 6.95 | 8.14 | 6.77 | 5.76 | 
| 3 | 13 | 13 | 13 | 8 | 7.58 | 8.74 | 12.74 | 7.71 | 
| 4 | 9 | 9 | 9 | 8 | 8.81 | 8.77 | 7.11 | 8.84 | 
| 5 | 11 | 11 | 11 | 8 | 8.33 | 9.26 | 7.81 | 8.47 | 
| 6 | 14 | 14 | 14 | 8 | 9.96 | 8.1 | 8.84 | 7.04 | 
| 7 | 6 | 6 | 6 | 8 | 7.24 | 6.13 | 6.08 | 5.25 | 
| 8 | 4 | 4 | 4 | 19 | 4.26 | 3.1 | 5.39 | 12.5 | 
| 9 | 12 | 12 | 12 | 8 | 10.84 | 9.13 | 8.15 | 5.56 | 
| 10 | 7 | 7 | 7 | 8 | 4.82 | 7.26 | 6.42 | 7.91 | 
| 11 | 5 | 5 | 5 | 8 | 5.68 | 4.74 | 5.73 | 6.89 | 

Ich habe eine Funktion wie folgt definiert:

julia> f1(df, matchval, matchfield, qfields...) = isempty(qfields) 
WARNING: Method definition f1(Any, Any, Any, Any...) in module Main at REPL[314]:1 overwritten at REPL[317]:1. 
f1 (generic function with 3 methods) 

Jetzt unten ist das Problem

julia> f1(anscombe, 11, "X1") 
ERROR: KeyError: key :field not found 
in getindex at ./dict.jl:697 [inlined] 
in getindex(::DataFrames.Index, ::Symbol) at /home/arghya/.julia/v0.5/DataFrames/src/other/index.jl:114 
in getindex at /home/arghya/.julia/v0.5/DataFrames/src/dataframe/dataframe.jl:228 [inlined] 
in f1(::DataFrames.DataFrame, ::Int64, ::String) at ./REPL[249]:2 

Wo mache ich falsch? FYI Ich benutze Julia Version 0.5.2. Wie man dieses Problem überwinden? Danke im Voraus!

Antwort

5

Es ist nichts falsch mit Ihrem Code - versuchen Sie nur, was Sie in einer neuen Sitzung gepostet haben. Möglicherweise haben Sie zuvor eine andere f1-Methode definiert. Wenn Sie aus R kommen, können Sie davon ausgehen, dass dies durch f1(df, matchval, matchfield, qfields...) = isempty(qfields) überschrieben wird, während Sie gerade eine neue Methode für die f1-Funktion definieren. Der Fehler wird wahrscheinlich von einer 3-Argument-Version ausgelöst, die Sie zuvor definiert haben. Schauen Sie sich https://docs.julialang.org/en/stable/manual/methods/

+1

Vielen Dank! Du hast es perfekt verstanden. – aroyc