зацикливание функции и изменение только одной переменной аргумента с каждой итерацией - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь выяснить, как зациклить функцию так, чтобы она изменяла один аргумент в функции, чтобы соответствовать переменной в списке

data=mtcars
carb=4
list<-list(1,2,4,5,6)

func<-function(data, cyln, carbn){
  a<-data%>%group_by(cyl==cyln,carb==carbn)%>%count
  print(a)
}

function(mtcars,list,4)...or something where cyl takes its value from the list. 

, где я в основном пытаюсь заставить функцию показыватьмне подсчитать (а) для каждого цилиндра, как указано в списке.

Итак, для печати отдельных подсчетов на 1 цил, 4 карбюратора;2 цил, 4 карбюратора;4 цил, 4 карбюратора;5 цил, 4 карбюратора;6 цил, 4 карбюратора.

Я не мог придумать способ применить список к функции таким образом, чтобы я мог просто изменить аргумент / переменную цилиндра

Любая помощь приветствуется

отредактируйте для ясности:

Я пытаюсь выполнить цикл, чтобы функция брала новый элемент из списка каждую итерацию.Внутри функции с каждым циклом было бы что-то вроде:

a<-data%>%group_by(cyl==1, carb)%>%count 
  print(a)

второй

a<-data%>%group_by(cyl==2, carb)%>%count
  print(a)

третий

a<-data%>%group_by(cyl==4,carb)%>%count
   print(a)

и 1, 2,4 (цил) прибывает из списка, в то время как другая переменная (карб) остается статической в ​​4.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Пользователь Reddit и-другой-один дал мне это решение, и оно прекрасно работает!:

Вместо цикла, попробуйте map из библиотеки purrr.Вы можете вставить фиктивные аргументы в функцию (.), Чтобы представить изменяющееся значение и установить данные и значения carbn по своему усмотрению.Просто не забудьте использовать тильду (~) перед функцией, чтобы она воспринимала ее как формулу.

map(list, ~ func(data = mtcars, cyln = ., carbn = 4))
0 голосов
/ 05 марта 2019

Вы можете использовать sapply для итерации каждого элемента вектора, содержащего значения для cyl.Например:

sapply(c(1,2,4,5,6), function(x)
  nrow(subset(mtcars, cyl == x & carb == 4)))

[1] 0 0 0 0 4

Я предполагаю, что вы просто использовали mtcars в качестве примера данных, поскольку единственными значениями cyl в этом наборе данных являются 4, 6, 8 и только cyl = 6, carb = 4 возвращаетзначения> 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...