Есть несколько хороших примеров для этого в R Wiki . Я украду пару здесь:
Метод слияния
Поскольку ваши ключи называются одинаковыми, короткий способ сделать внутреннее соединение - merge ():
merge(df1,df2)
полное внутреннее соединение (все записи из обеих таблиц) может быть создано с помощью ключевого слова «все»:
merge(df1,df2, all=TRUE)
левое внешнее соединение df1 и df2:
merge(df1,df2, all.x=TRUE)
правое внешнее объединение df1 и df2:
merge(df1,df2, all.y=TRUE)
вы можете перевернуть их, пощекотать их и протрите их, чтобы получить другие два внешних соединения, о которых вы спрашивали:)
Метод подстроки
Левое внешнее соединение с df1 слева с использованием метода подстроки будет:
df1[,"State"]<-df2[df1[ ,"Product"], "State"]
Можно создать и другую комбинацию внешних соединений путем макетирования примера нижнего нижнего соединения. (да, я знаю, что это эквивалент слова «Я оставлю это как упражнение для читателя ...»)
Каждое выражение лямбда генерирует уникальный объект функции (замыкание), который сохраняет захваченные переменные в качестве элементов данных. Например, выражение lambda в вашем коде будет преобразовано в компилятор таким образом:
struct __uniquely_named_lambda
{
__uniquely_named_lambda(int& pos)
: pos(pos) {}
int& pos;
void operator()() const
{ ++pos; }
};
Вызов лямбда - это просто вызов operator()
.
элемент данных является ссылкой, поскольку вы захватили по ссылке. Если вы захватили по значению, это будет простой int
. Также обратите внимание, что сгенерированный operator()
по умолчанию const
. Вот почему вы не можете изменять захваченные переменные, если не используете ключевое слово mutable
.
for
и, как и большинство остальных C ++, это стандартизированное поведение, и это поведение не кодируется в коде C ++. В частности, вышеупомянутая "поддельная" У lambda есть конструктор - самим лямбдам не нужно их (они могут делать это через магию). Кроме того, если вы передаете вышеупомянутую «фальшивку», lambda reference, он остается действительным до тех пор, пока ссылочные данные действительны - для реальной лямбды технически требуются как данные , так и , эта ссылочная переменная, которую она зафиксировала, остается действительной. – Yakk - Adam Nevraumont 6 May 2014 в 18:53{}
с перегрузками?) - - Я не убежден, что это не наблюдаемо, но не обязательно. – Yakk - Adam Nevraumont 7 May 2014 в 12:13