easystats / easystats/datawizard
`data_filter`: Add support for loop indices within functions?
Open
Nobody has claimed this yet.
- Dominant language
- R
- Stars
- 238
- Forks
- 18
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 4
Description
Still within #301, I wonder if it would make sense to add support for loop indices within functions for data_filter, @etiennebacher?
library(datawizard)
df1 <- data.frame(
id = c(1, 2, 3, 1, 3),
item1 = c(NA, 1, 1, 2, 3),
item2 = c(NA, 1, 1, 2, 3),
item3 = c(NA, 1, 1, 2, 3)
)
# Attempt 1
fun <- function(data, id) {
min.index <- NULL
for (i in unique(data[[id]])) {
min.index[i] <- 2
x <- data_filter(data, item3 == min.index[i])
}
x
}
fun(df1, id = "id")
#> Error: Filtering did not work. Please check the syntax of your `filter`
#> argument.
# Attempt 2, using quotes
fun <- function(data, id) {
min.index <- NULL
for (i in unique(data[[id]])) {
min.index[i] <- 2
x <- data_filter(data, "item3 == min.index[i]")
}
x
}
fun(df1, id = "id")
#> Error: Filtering did not work. Please check the syntax of your `filter`
#> argument.
# Attempt 3, using curly brackets
fun <- function(data, id) {
min.index <- NULL
for (i in unique(data[[id]])) {
min.index[i] <- 2
x <- data_filter(data, item3 == min.index[{i}])
}
x
}
fun(df1, id = "id")
#> Error: Filtering did not work. Please check the syntax of your `filter`
#> argument.
# Workaround is to create the index manually first
fun <- function(data, id) {
min.index <- NULL
for (i in unique(data[[id]])) {
min.index[i] <- 2
index <- which(data$item3 == min.index[i])
x <- data_filter(data, index)
}
x
}
fun(df1, id = "id")
#> id item1 item2 item3
#> 4 1 2 2 2
Created on 2022-11-05 with reprex v2.0.2
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the data_filter entry point and reproduce the three examples in the issue, including the quoted and curly-brace forms. Done means filtering expressions can access loop indices from within a function without requiring the manual which() workaround.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r
- Domain
- data
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100