В чем разница между `transform` и` inside`

Чтение этого отличного сообщения, на которое я наткнулся within и transform.

Чтение обоих файлов справки я, к сожалению, не совсем понял, что такое разница...

Я пробовал что-то вроде:

df <- data.frame(A = runif(5), B = rnorm(5))
A=1:5
within(df, C<-A+B)
transform(df,C=A+B)

Оба значения были:

          A          B         C
1 0.2326266  1.3237210 1.5563476
2 0.4581693 -0.2605674 0.1976018
3 0.6431078  0.5920021 1.2351099
4 0.9682578  1.1964012 2.1646590
5 0.9889942  0.5468008 1.5357950

Таким образом, оба могут создать новую среду, поскольку они игнорируют A=1:5 в рамках оценки.

Спасибо заранее!

Ответ 1

within позволяет использовать ранее определенную переменную позже, но не transform:

within(BOD, { a <- demand; b <- a }) # ok
transform(BOD, a = demand, b = a) # error

Обратите внимание, что я определил вариант transform, который больше напоминает within несколько лет назад здесь, где он называется my.transform. Используя это, мы могли бы написать выше:

my.transform(BOD, a = demand, b = a) # ok

В приведенных выше примерах within (или my.transform) было бы лучше, но в следующем transform было бы лучше:

transform(BOD, Time = demand, demand = Time) # swap columns
within(BOD, { Time <- demand; demand <- Time }) # oops

(Для выполнения подкачки с within потребуется определить временную.)