#r #dplyr #rlang
#r #dplyr #rlang
Вопрос:
У меня есть следующая функция
colr <- function(file){
a <- file %>%
read_xlsx()
ncol(a)
}
Я хотел бы передать tibble, который содержит столбец имен моих файлов Excel, в эту функцию и создать новый столбец, который сообщает мне количество столбцов в электронной таблице Excel.
итак, мой tibble(file.list) — это
> file.list
<chr>
file_a.xlsx
file_b.xlsx
file_c.xlsx
Я хотел бы следующее
> file.list ncols
<chr> <int>
file_a.xlsx 10
file_b.xlsx 10
file_c.xlsx 2
Это то, что я пробовал
tibble(file.list) %>%
mutate(ncols = colr(file.list))
но я получил сообщение об ошибке
Ошибка:
path
должно быть строкой
затем я попробовал использовать quo
tibble(file.list) %>%
mutate(ncols = colr(quo(file.list)))
В итоге я столкнулся с той же ошибкой.
Что я делаю не так?
Комментарии:
1. Первое, что нужно проверить, работает ли это
file.list[1] %>% read_xlsx(.,range = cell_cols("A:Z")) %>% ncol
? Также вам может потребоваться указать полный путь к файлам xlsx.2.
colr
Работает ли, когда вы передаете ему одно имя файла в виде строки? Например, .colr("file_a.xlsx")
3. Я действительно получаю целое число, возвращаемое с помощью
colr("file_a.xlsx")
4. @RonakShah
file.list[1] %>% read_xlsx() %>% ncol
работает5.
purrr
dplyr
Выполняется ли этот код с помощью и?tibble(file.list) %>% mutate(ncols = map_int(file.list, colr))
Ответ №1:
Как предложено в комментарии @Lyngbakr, мы можем использовать map_int
или rowwise
для каждого file.list
library(dplyr)
library(purrr)
tibble::tibble(file.list) %>%
mutate(ncols = map_int(file.list, colr))
tibble::tibble(file.list) %>%
rowwise() %>%
mutate(ncols = colr(file.list))
Комментарии:
1.
colr
возвращает целое число, так что не так лиmap_int
?2. да
map_int
, было бы лучше. Также я заметил, что вы опубликовали комментарий ранее. Я не против удалить ответ. Вы можете опубликовать это как свой ответ. 🙂3. Это было почти в то же время, поэтому удалять не нужно! Тем не менее, спасибо.