Replies: 21 comments 52 replies
-
I actually like the |
Beta Was this translation helpful? Give feedback.
-
I prefer |
Beta Was this translation helpful? Give feedback.
-
The I understand the utility for the |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
I have a question about potential teal::init(
modules = modules(
module(label = "m1", ...),
module(label = "m2", ...)
),
transform = teal_transforms(
teal_transform(id = "t1", ...),
mapping = list(
m1 = "t1",
m2 = "t1"
)
)
) Do we want them to be shared or just copied. I mean this:
|
Beta Was this translation helpful? Give feedback.
-
Small note that mapping by label is very confusing. This should have been done by ID. There is a dedicated issue for this: #969. If done, there will be no problems with duplicated labels (which should be perfectly fine btw). |
Beta Was this translation helpful? Give feedback.
-
My preference is towards by argument. I think it's simpler. I would like to have just one collection to manage (that is what is passed to the This is what I am talking about:
There are few bad consequences of this. I think that the most important is that it would make incremental app building very difficult. Let's suppose that the app throws an error. A typical debugging includes commenting-out modules and add them one by one to identify which module throws. You cannot do this easily as you need to comment-out / uncomment two collections. That's really unnecessary I believe. |
Beta Was this translation helpful? Give feedback.
-
In this comment I use a certain shortcuts to describe two type of handling transform modules:
This comment is written in a "iterative" way, so that I start from the simple proposition and trying to improve step by step. 1. Transform only in the modulepseudo apiinit(
filter = teal_slices(
mapping
),
modules = modules(
module(transforms)
)
) In the above a module encoding can grow significantly. Module developer will have extra responsibility to handle data transform. 2. Transform handled by tealinit(
filter = teal_slices(module_specific),
modules = modules(
module() |>
with_transforms()
)
) Instead of handling in a module we can handle this in teal. This will be done by adding 3. No
|
Beta Was this translation helpful? Give feedback.
-
This looks like an extreme case to me. Would it not mean that one module operates on essentially different data? Perhaps the app dev should create |
Beta Was this translation helpful? Give feedback.
-
Right, I remember now.
This is true before the introduction of transforms. I respectfully suggest not combining it with the problem at hand unless serious changes in |
Beta Was this translation helpful? Give feedback.
-
Question from the meeting:
|
Beta Was this translation helpful? Give feedback.
-
Hey guys, with a great power of Power Point I created a small proposition of the UI and API in here #1223 |
Beta Was this translation helpful? Give feedback.
-
What's the advantage of having Let's say I think we could have sidebars defined outside (maybe cache reactive result to avoid duplication) The approach on My general concern is about the complexity. I share @gogonzo thoughts on the reactives (which might not be restricted to The idea of @m7pr on making this drag-and-dropable is enticing as there will probably be no technical limitations to such a feature if we set up the structure correctly (there will be edge cases such as where moving operation above the creation on new variable, but we could deal with them). Some questions: 🯄: Could we make use of 🯄: Should transform operations be allowed on existing columns? let's say |
Beta Was this translation helpful? Give feedback.
-
I have one biggest question about a solution. If input (reactive x) of item2 depends on the output of the item1 what happens if the item1 is removed?
I don't think so as output of itemN will depend on independent serie from item1 to itemN-1.
It will be impossible to find robust solution to forbid this. Transform could be custom shiny module and parsing/detecting calls or monitoring environment would be hard.
Changing an order in the interactive session is similar problem to the remove and add. We need to first figure out if we can recompute reactive structure on the fly. I can imagine a solution in which input of itemN is something like this # pseudocode
reactive_x <- reactive({
idx_this <- <reactive value>
idx_previous <- idx_this - 1
previous_item <- reactive_queue[[idx_previous]]
previous_item()
})
transfrom_item_srv(reactive_x, ....) Above is mind-boggling as item's module needs to be called once with some reactive. This means that reactive can't be simply output of previously called module, but an output of a module located as previous in the queue. So any change of the order or previous items itself should retrigger reactivity. |
Beta Was this translation helpful? Give feedback.
-
Basically, we have few proposed ways of how to map transformation items with modules.
My conclusion: |
Beta Was this translation helpful? Give feedback.
-
There will be a lot to educate.
Yup, this is also something to consider. @pawelru for example don't like decorating To all, don't get me wrong, I love shared teal_slice, but when custom
|
Beta Was this translation helpful? Give feedback.
-
Possible ways without going into details:
|
Beta Was this translation helpful? Give feedback.
-
As a framework, providing more flexibility is better, and Here we can deprecate mapping for slices/tranform defined in the global scope by combining approach 3. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
I consider above valid as it was agreed on multiple meetings with everyone involved.
teal::init(
data = ...,
modules = modules(
# by arg
tm_xy(..., transforms = <list of teal_transform_module>),
# by decorator
tm_xy(...) |> with_transforms(<list of teal_transform_module>)
)
)
Because we can't mix |
Beta Was this translation helpful? Give feedback.
-
Closing discussion. We start with simple |
Beta Was this translation helpful? Give feedback.
-
What API you prefer for data transformation in future
teal
let's vote, discuss and revote.Pros:
Cons:
Pros:
Cons:
Key takeaways from the discussions:
reactive(teal_data)
as input and output of the transform module is a good solution.teal_transform_module
can't be shared across the modules as same shiny module is called independently.7 votes ·
Beta Was this translation helpful? Give feedback.
All reactions