После шага nest
мы можем просмотреть «данные» list
в mutate
, используя map
, затем выполнить group_by
и summarise
с ним
library(tidyverse)
NBA%>%
group_by(season)%>%
nest() %>%
mutate(data = map(data, ~ .x %>%
group_by(player)%>%
summarise(shots_attempts_ratio=sum(shot_made)/n(),
total_attempts=n(),
shots=sum(shot_made))
)) %>%
unnest
Заключение в кавычки из комментария:
Я делаю метод, который в основном избавится от структуры. это имеет элемент данных, который является указателем на что-то, что может или не может быть malloced.. в зависимости от которого, я хотел бы освободить его
Корректный путь состоит в том, чтобы добавить другого участника к структуре: указатель на функцию освобождения.
Это не просто статично по сравнению с динамическим выделением. Существует несколько возможных средств выделения, который malloc()
всего один.
В подобных Unix системах это могло быть:
alloca()
)malloc()
new
new[]
malloc()
new
mmap
В Windows у Вас также есть несколько времени выполнения, LocalAlloc
, GlobalAlloc
, HeapAlloc
(с несколькими "кучей", которую можно создать легко), и так далее.
Необходимо всегда освобождать память с корректной функцией выпуска для средства выделения, которое Вы использовали. Так, или часть программы, ответственной за выделение памяти, должна также освободить память, или необходимо передать корректную функцию выпуска (или обертка вокруг этого) к коду, который освободит память.
Можно также избежать целого выпуска или требованием, чтобы указатель всегда был выделен с определенным средством выделения или путем обеспечения средства выделения сами (в форме функции для выделения памяти и возможно функции для выпуска его). При обеспечении средства выделения сами можно даже использовать приемы (как теговые указатели), чтобы позволить тому также использовать статическое выделение (но я не буду вдаваться в подробности этого подхода здесь).
У Raymond Chen есть сообщение в блоге об этом (Центральный Windows, но понятия являются тем же везде): Выделение и освобождение памяти через границы модуля
Библиотека ACE делает это повсеместно. Вы можете проверять, как они делают это. В целом Вы, вероятно, не должны должны быть делать это во-первых хотя...
Начиная с "кучи" стек и статическая область данных обычно занимают различные диапазоны памяти, возможно с глубокими знаниями карты распределения памяти процесса, посмотреть на адрес и определить, в какой области выделения это находится. Эта техника является и архитектурой и конкретным компилятором, таким образом, это делает портирование Вашего кода более трудным.
Можно ли сцепиться в malloc () сам, как malloc отладчики делают, с помощью LD_PRELOAD или чего-то? Если так, Вы могли сохранить таблицу всех выделенных указателей и использования этим. Иначе я не уверен. Существует ли способ достигнуть бухгалтерскую информацию malloc?
Большинство libc malloc реализации работает путем хранения заголовка перед каждым возвращенным блоком памяти, который имеет поля (чтобы использоваться свободным () вызов), который имеет информацию о размере блока, а также 'волшебное' значение. Это волшебное значение должно защитить от пользователя, случайно удаляющего указатель, который не был alloc'd (или освобождение блока, который был перезаписан пользователем). Это - очень система, конкретная, таким образом, необходимо было бы посмотреть на реализацию libc библиотеки для наблюдения точно, чем волшебное значение было там.
После того как Вы знаете, что, кладете обратно данную подсказку, чтобы указать на заголовок и затем проверить его на волшебное значение.
Не как стандартная функция.
Отладочная версия Вашей malloc библиотеки могла бы иметь некоторую функцию, чтобы сделать это.
Можно сравнить его адрес с чем-то, что Вы знаете, чтобы быть статичными, и сказать, что это - malloced, только если это далеко, если Вы знаете объем, это должно прибывать из, но если его объем неизвестен, Вы не можете действительно доверять этому.
1.) Получите файл карты для кода, который Вы имеете.
2.) Базовая целевая платформа процесса/аппаратных средств должна иметь файл карты распределения памяти, который обычно указывает - начальный адрес памяти (стек, "куча", global0, размер того блока, атрибуты чтения-записи того блока памяти.
3.) После получения адреса объекта (переменная указателя) из mao файла в 1.) пытаются видеть, в какой блок тот адрес падает. u мог бы получить некоторое представление.
=AD