Функция base reshape
работает отлично:
df <- data.frame(
year = c(rep(2000, 12), rep(2001, 12)),
month = rep(1:12, 2),
values = rnorm(24)
)
df_wide <- reshape(df, idvar="year", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Здесь idvar
- столбец классов, который разделяет строки, timevar
- столбец классов, который должен быть широко представлен, v.names
- это столбец, содержащий числовые значения, direction
указывает широкий или длинный формат, а необязательный аргумент sep
- это разделитель, используемый между именами классов timevar
и v.names
на выходе data.frame
. Если нет idvar
, создайте его перед использованием функции reshape()
:
df$id <- c(rep("year1", 12), rep("year2", 12))
df_wide <- reshape(df, idvar="id", timevar="month", v.names="values", direction="wide", sep="_")
df_wide
Просто помните, что требуется idvar
! Часть timevar
и v.names
проста. Выход этой функции более предсказуем, чем некоторые другие, поскольку все явно определено.
Это зависит от того, что вы хотите:
A) Если вы хотите указать, к каким библиотекам обращаться, вы можете использовать find_library для поиска libs, а затем использовать link_directories и target_link_libraries to.
Конечно, часто стоит написать хороший скрипт find_package , который красиво добавляет «импортированные» библиотеки с add_library (YourLib IMPORTED) с правильными местоположениями, а также предварительные и суффиксы платформы / сборки. Затем вы можете просто ссылаться на «YourLib» и использовать target_link_libraries.
B) Если вы хотите указать конкретные метки-линкера, например. '-mthreads' или '-Wl, - export-all-symbols' с помощью MinGW-GCC, вы можете использовать CMAKE_EXE_LINKER_FLAGS . Есть также два похожих, но недокументированных флага для модулей, общих или статических библиотек:
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
Для связывания с библиотеками см. ответ Андре .
Для флагов компоновщика - следующие 4 переменные CMake:
CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
можно легко манипулировать для различные конфигурации (debug, release ...) с макросом ucm_add_linker_flags в ucm
Вы можете указать флаги компоновщика в target_link_libraries .
Посмотрите:
CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
Если вы хотите добавить флаг в каждую ссылку , например. -fsanitize=address
, то я бы не рекомендовал использовать CMAKE_*_LINKER_FLAGS
. Даже при их установке все еще не используется флаг при связывании фреймворка на OSX и, возможно, в других ситуациях. Вместо этого используйте link_libraries()
:
add_compile_options("-fsanitize=address")
link_libraries("-fsanitize=address")
Это работает для всего.