# Call a constructor by interpolation

**URL:** <https://discourse.julialang.org/t/call-a-constructor-by-interpolation/46732>\
**Category:** New to Julia\
**Tags:** question, metaprogramming, dataframes, interpolations\
**Created:** [September 16, 2020, 9:32pm UTC](https://discourse.julialang.org/t/call-a-constructor-by-interpolation/46732 "2020-09-16T21:32:33Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![mkarikom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkarikom/32/7096_2.png) [@mkarikom](https://discourse.julialang.org/u/mkarikom)\
**Post date:** [September 16, 2020, 9:32pm UTC](https://discourse.julialang.org/t/call-a-constructor-by-interpolation/46732/1 "2020-09-16T21:32:33Z")

</div>

I need to programmatically initialize an empty DataFrame using a vector of names and a vector of types:

Here is an example of doing this explicitly:

```julia
DataFrame(mystrings=String[],myints=Int64[])
0×2 DataFrame

```

MWE for doing this programmatically:

```julia
nm = ["mystrings","myints"]
tps = (String,Int64)
expr = :(DataFrame($nm .= $tps))
eval(expr)

ERROR: MethodError: Cannot `convert` an object of type Type{String} to an object of type String

```

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [September 16, 2020, 10:41pm UTC](https://discourse.julialang.org/t/call-a-constructor-by-interpolation/46732/2 "2020-09-16T22:41:30Z")

</div>

Dataframe has a constructor `DataFrame(column_eltypes, names)`, so you can do

```julia
julia> nm = ["mystrings", "myints"];

julia> tps = [String, Int64];

julia> df = DataFrame(tps, nm);

julia> names(df)
2-element Array{String,1}:
 "mystrings"
 "myints"

```

I didn’t use eval above because I think it’s a bad idea. Is there any reason why you think it would be necessary in order to do what you’re trying to do?

---

<div class="post-metadata">

**Author:** ![mkarikom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkarikom/32/7096_2.png) [@mkarikom](https://discourse.julialang.org/u/mkarikom)\
**Post date:** [September 16, 2020, 10:51pm UTC](https://discourse.julialang.org/t/call-a-constructor-by-interpolation/46732/3 "2020-09-16T22:51:46Z")

</div>

> [@mkarikom](#):
>
> > [@](#):
> >
> > I didn’t use eval above because I think it’s a bad idea. Is there any reason why you think it would be necessary in order to do what you’re trying to do?

Perfect thanks, I only tried quoting because I didn’t know about `DataFrame(column_eltypes, names)`
