Skip to content

Commit feaaf37

Browse files
authored
Fix wrong makeunique suggestion in stack error message (#3526)
1 parent b12f7fb commit feaaf37

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

src/abstractdataframe/reshape.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,22 @@ function stack(df::AbstractDataFrame,
155155
end
156156
N = length(ints_measure_vars)
157157
cnames = _names(df)[ints_id_vars]
158+
159+
if variable_name_s in cnames
160+
throw(ArgumentError("Column name :$variable_name_s already exists in the " *
161+
"data frame. Pass `variable_name` keyword argument to " *
162+
"use a different name for the variable column."))
163+
end
164+
165+
if value_name_s in cnames
166+
throw(ArgumentError("Column name :$value_name_s already exists in the " *
167+
"data frame. Pass `value_name` keyword argument to " *
168+
"use a different name for the value column."))
169+
end
170+
158171
push!(cnames, variable_name_s)
159172
push!(cnames, value_name_s)
173+
160174
if variable_eltype === Symbol
161175
catnms = PooledArray(_names(df)[ints_measure_vars])
162176
elseif variable_eltype === String
@@ -187,6 +201,18 @@ function _stackview(df::AbstractDataFrame, measure_vars::AbstractVector{Int},
187201
value_name::Symbol, variable_eltype::Type)
188202
N = length(measure_vars)
189203
cnames = _names(df)[ints_id_vars]
204+
205+
if variable_name in cnames
206+
throw(ArgumentError("Column name :$variable_name already exists in the " *
207+
"data frame. Pass `variable_name` keyword argument to " *
208+
"use a different name for the variable column."))
209+
end
210+
if value_name in cnames
211+
throw(ArgumentError("Column name :$value_name already exists in the " *
212+
"data frame. Pass `value_name` keyword argument to " *
213+
"use a different name for the value column."))
214+
end
215+
190216
push!(cnames, variable_name)
191217
push!(cnames, value_name)
192218
if variable_eltype === Symbol

test/reshape.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,4 +1006,18 @@ end
10061006
DataFrame(x=1:3, a=[11, missing, missing], b=[missing, 12, missing], missing=[missing, missing, 13])
10071007
end
10081008

1009+
1010+
@testset "better stack errors" begin
1011+
df = DataFrame(foo=["a","a","b"], variable=["x","x","x"], v1=[1,1.5,2], v2=[10,11.5,13.5])
1012+
@test_throws ArgumentError stack(df)
1013+
@test_throws ArgumentError stack(df, [:v1, :v2], variable_name=:foo)
1014+
@test_throws ArgumentError stack(df, [:v1, :v2], value_name=:foo)
1015+
df2 = DataFrame(foo=["a","b"], value=["x","y"], v1=[1,2])
1016+
@test_throws ArgumentError stack(df2, [:v1], value_name=:foo)
1017+
# view=true path
1018+
@test_throws ArgumentError stack(df, [:v1, :v2], view=true)
1019+
@test_throws ArgumentError stack(df, [:v1, :v2], variable_name=:foo, view=true)
1020+
end
1021+
1022+
10091023
end # module

0 commit comments

Comments
 (0)