shahryarjb

shahryarjb

Hello, I started the ml elixir book, the first code in this book has error for me :smiling_face_with_tear:

require Explorer.DataFrame, as: DF
iris = Explorer.Datasets.iris()
cols = ["sepal_width", "sepal_length", "petal_length", "petal_width"]

DF.mutate(iris,
  for col <- across(cols) do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

Errors

** (ArgumentError) undefined variable "cols"
    (explorer 0.6.1) lib/explorer/query.ex:365: Explorer.Query.traverse/3
    (elixir 1.15.2) lib/enum.ex:1819: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
    (explorer 0.6.1) lib/explorer/query.ex:375: Explorer.Query.traverse/3
    (explorer 0.6.1) lib/explorer/query.ex:401: Explorer.Query.traverse_for/3
    (explorer 0.6.1) lib/explorer/query.ex:298: anonymous fn/3 in Explorer.Query.traverse/2
    (elixir 1.15.2) lib/enum.ex:1819: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
    (explorer 0.6.1) lib/explorer/query.ex:296: Explorer.Query.traverse/2
    (explorer 0.6.1) expanding macro: Explorer.Query.query/1

I am using LiveBook v0.10.0 and these deps:

Mix.install([
  {:axon, "~> 0.5"},
  {:nx, "~> 0.5"},
  {:explorer, "~> 0.5"},
  {:kino, "~> 0.5"}
])

It should be noted if I use the list directly it has not problem

require Explorer.DataFrame, as: DF
iris = Explorer.Datasets.iris()

DF.mutate(iris,
  for col <- across( ["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

why it has this error?
Thank you in advance

Showing Posts 6 to 1

seanmor5

seanmor5

Author of Genetic Algorithms in Elixir
shahryarjb

shahryarjb OP

I think the author should change it in the book, @seanmor5

codeanpeace

codeanpeace

It seems like Explorer.Query adopted a similar approach to Ecto.Query in its use of ^ for interpolation.

reference: Interpolation and Casting | Ecto.Query & Interpolation | Explorer.Query

p.s. It’s worth noting that the ^ in Ecto and Explorer is not the same as the ^ pin operator in Elixir – learn more about it here: https://stackoverflow.com/questions/73588330/why-do-ecto-queries-need-the-pin-operator

NickGnd

NickGnd

Ah I see, sorry I missed that.

I guess you can apply a filter based on the column type:

DF.mutate(iris,
  for col <- across(), col.dtype == :float do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

:thinking:

Honestly, I don’t know why the book suggests an usage of the across macro that is not contemplated by the documentation, or maybe I’m missing something :upside_down_face:

shahryarjb

shahryarjb OP

These are not all the columns

but based on my top code, it I use

for col <- across( ["sepal_width", "sepal_length", "petal_length", "petal_width"]) do

it works but the

cols = ["sepal_width", "sepal_length", "petal_length", "petal_width"]

DF.mutate(iris,
  for col <- across(cols) do

does not work.

If I use

DF.mutate(iris,
  for col <- across() do

it shows me

** (ArgumentError) Explorer.Series.mean/1 not implemented for dtype :string. Valid dtypes are [:integer, :float]
    (explorer 0.6.1) lib/explorer/series.ex:4692: Explorer.Series.dtype_error/3
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:7: (file)
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:6: (file)
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:5: (file)
NickGnd

NickGnd

Hey @shahryarjb :wave:

I didn’t try and I don’t own the book (yet), but based on the documentation if you want to access to all the columns in a for comprehension loop you just need to use across().

See this section Explorer.Query — Explorer v0.11.1

A for-comprehension can have multiple generators and filters. For instance, if you want to apply standardization to all float columns, we can use across/0 to access all columns and then use a filter to keep only the float ones:

Hope it helps, enjoy the reading :slight_smile:

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews