У меня есть функция, которая выбирает некоторые данные из базы данных.Он принимает один параметр и возвращает data.frame.Я хотел бы использовать входной вектор этих параметров и передать их на карту или аналогичную функцию, которая принимает каждый элемент и возвращает результаты в БД.Результаты могут различаться в строках, но столбцы всегда одинаковы.Как мне обходиться без зацикливания и связывания строк?(для меня в ..)
Я попробовал следующий маршрут:
myfuncSingleRow<-function(nbr){
data.frame(a=nbr,b=nbr^2,c=nbr^3)}
myfuncMultipleRow<-function(nbr){
data.frame(a=rep(nbr,3),b=rep(nbr^2,3),c=rep(nbr^3,3))}
a<-data.frame(count=c(1,2,3))
myfuncSingleRow(2)
myfuncMultipleRow(2)
a %>% select(count) %>% map_dfr(.f=myfuncSingleRow) #output as expected
a %>% select(count) %>% map_dfr(.f=myfuncMultipleRow) #output not as expected
Теперь это не работает так, как задумано.Пример myFuncMultipleRow, я ожидал, что первые 3 строки будут равны, следующие 3 равны, и то же самое для финального 3. Пример использования myFuncMultipleRow:
Получение
a b c
1 1 1 1
2 2 4 8
3 3 9 27
4 1 1 1
5 2 4 8
6 3 9 27
7 1 1 1
8 2 4 8
9 3 9 27
Wanting:
a b c
1 1 1 1
2 1 1 1
3 1 1 1
4 2 4 8
5 2 4 8
6 2 4 8
7 3 9 27
8 3 9 27
9 3 9 27
Как обычно, я, вероятно, неправильно использую функции, но немного застрял здесь и не хочу переходить к старому циклу и rbind, которые, вероятно, были бы узким местом в производительности.Любые желающие?
РЕДАКТИРОВАТЬ: Как указано, «каждый» аргумент в «rep» решает этот, но не решает основной вопрос.Если map итерировал и вызывал функцию для каждого элемента, то использование параметра «each» и «times» для функции «rep» должно давать тот же результат.Функция, переданная в map, не векторизована, но предполагает один параметр длины 1. Решение необходимо сделать:
res<-data.frame()
for(i in a) res<-rbind(res,myfuncMultipleRow(i))