зацикливание функции и изменение только одной переменной аргумента с каждой итерацией

Во втором случае вы назначаете x+y на x

. В первом случае второй результат (x+y) присваивается y

Вот почему вы получаете разные результаты.

После редактирования

Это происходит потому, что в заявлении

x,y = y,x+y

оцениваются все переменные в правой части и затем сохраняются в левых членах. Итак, сначала приступим к правильному члену, а второй - к левому элементу.

Во втором утверждении

x = y
y = x + y

yo сначала оценили y и назначили его x; Таким образом, сумма x+y эквивалентна сумме y+y, а не x+x, которая является первым случаем.

-1
задан Tyler 5 March 2019 в 22:50
поделиться

2 ответа

Вы можете использовать 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.

0
ответ дан neilfws 5 March 2019 в 22:50
поделиться

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

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

map(list, ~ func(data = mtcars, cyln = ., carbn = 4))
0
ответ дан Tyler 5 March 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: