Google Sheets offers passing in parameters to lambdas as such:
=LAMBDA(x, y, x y)(100, 200)
I was thinking of taking 2 columns from another Sheet, filter it with QUERY and then pass those 2 columns into the LAMBDA. Basically the 2 columns were a key and a CSV text that I wanted to split in one go.
=lambda(a, b, split(b, ","))(query('Alias Key Raw'!A1:B, "select * where A starts with 'X'"))
This gives the following ERROR Wrong number of arguments to call following LAMBDA function. Expected 2 arguments, but got 1 arguments.
. Given that QUERY provides 2 columns of actual values, I thought this would be possible.
=byrow(query('Alias Key Raw'!A1:B, "select * where A starts with 'X'"), lambda(row, split(row, ",")))
This gives me only column A. No error otherwise. All of column B is ignored it appears
- I've tried using
BYCOL
,BYROW
, etc, and a lot of errors areERROR Wrong number of arguments to call following LAMBDA function. Expected 2 arguments, but got 1 arguments.
Data
Input into the lambda
Key | Lineages |
---|---|
CU | B.1.1.529.5.1.26 |
CV | B.1.1.529.2.75.3.1.1.3 |
XA | B.1.1.7,B.1.177 |
XB | B.1.634,B.1.631 |
XC | AY.29,B.1.1.7 |
XAZ | BA.2.5,BA.5,BA.2.5 |
XBC | BA.2*,B.1.617.2*,BA.2*,B.1.617.2* |
Expected
Output from the lambda
Key | Lineages | |||
---|---|---|---|---|
XA | B.1.1.7 | B.1.177 | ||
XB | B.1.634 | B.1.631 | ||
XC | AY.29 | B.1.1.7 | ||
XAZ | BA.2.5 | BA.5 | BA.2.5 | |
XBC | BA.2* | B.1.617.2* | BA.2* | B.1.617.2* |
Note: There can be any number of lineages in the CSV cell
CodePudding user response:
Updated
=ArrayFormula(
LAMBDA(a, {QUERY({a},"Select Col1"),SPLIT(QUERY({a},"Select Col2"),",")})
(QUERY('Alias Key Raw'!A1:B, "select * where A starts with 'X'",1)))
Explanaition:
using an Array {}
to return:
Col1: {QUERY({a},"Select Col1"),...}
Col2: {...,SPLIT(QUERY({a},"Select Col2"),",")}
Of the Query
QUERY('Alias Key Raw'!A1:B, "select * where A starts with 'X'",1)
found in the Lambda
call named a
Used formulas help
ARRAYFORMULA
- LAMBDA
- QUERY
- SPLIT
CodePudding user response:
Perhaps worth pointing out that the expected data can be returned with a more compact formula that uses neither QUERY nor LAMBDA:
=filter({A1:A,split(B1:B,",")},regexmatch(A1:A,"^X"))