Во втором случае вы назначаете 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
, которая является первым случаем.
Вы можете использовать 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.
Пользователь Reddit и еще один пользователь дали мне это решение, и оно прекрасно работает! :
Вместо цикла, попробуйте map из библиотеки purrr. Вы можете вставить фиктивные аргументы в функцию (.), Чтобы представить изменяющееся значение и установить данные и значения carbn по своему усмотрению. Просто не забудьте использовать тильду (~) перед функцией, чтобы она воспринимала ее как формулу.
map(list, ~ func(data = mtcars, cyln = ., carbn = 4))