Теоретически первый int *myNum = 10
имеет смысл, особенно если вы знаете, что есть полезный int
по адресу ten & mdash; в общем, он редко полезен и потенциально весьма опасен.
Однако есть определенные назначения указателей, которые широко используются и совершенно безопасны:
int *myNum = 0;
На 99,9 +% современных архитектур процессора это то же самое, что и
int *myNum = NULL;
См. определение NULL в
здесь .
Как правило, назначение переменных указателя лучше всего сделать, установив адрес другого.
int k, *p = &k;
Вы можете попробовать использовать аргумент widths
из grid.arrange
. Вам нужно будет определить соотношение всех итоговых диаграмм Венна. В вашем примере отношение общего размера составляет 800:110
, то есть 7.27
, поэтому, если вы сделаете grid.arrange(plot(fit1), plot(fit2), ncol = 2, widths = c(7.27, 1))
, то fit2
будет намного меньше, чем fit1
. Функция ggarrange()
из ggpubr также должна работать.
fit1 <- euler(c(A=300, B=500, "A&B"=100))
fit2 <- euler(c(A=40, B=70, "A&B"=30))
tot1 <- 800
tot2 <- 110
ratio_v <- tot1/tot2
grid.arrange(plot(fit1), plot(fit2), ncol = 2, widths = c(ratio_v, 1))
ggpubr:ggarrange(plotlist = list(plot(fit1), plot(fit2)), ncol = 2, widths = c(ratio_v, 1))
Редактировать: хотите, чтобы отдельные попарные наборы имели собственные соотношения размеров вместо всего, что связано с глобальным максимумом. Это простой пример, но вы можете написать функцию, которая будет делать это автоматически для каждого. В основном установите максимальное количество столбцов (я просто выбрал 100), а затем преобразуйте каждое из ваших соотношений в 100. Создайте строку для каждого набора диаграмм Венна, затем rbind
все их в матрицу и используйте [1111 ] аргумент.
### Make fits
fit1 <- euler(c(A=300, B=500, "A&B"=100))
fit2 <- euler(c(A=40, B=70, "A&B"=30))
fit3 <- euler(c(C=100, D=300, "C&D"=50))
fit4 <- euler(c(C=50, D=80, "C&D"=30))
### Assign totals
tot1 <- 800
tot2 <- 110
tot3 <- 400
tot4 <- 130
### Find ratios
ratioAB_v <- round(tot1/tot2)
ratioCD_v <- round(tot3/tot4)
### Convert ratios
smallAB_v <- round(1/ratioAB_v*100)
smallCD_v <- round(1/ratioCD_v*100)
### Make rows
row1_v <- c(rep(1, (100-smallAB_v)), rep(2, smallAB_v))
row2_v <- c(rep(3, (100-smallCD_v)), rep(4, smallCD_v))
### Make matrix
mat <- rbind(row1_v, row2_v)
### Plot
grid.arrange(plot(fit1), plot(fit2), plot(fit3), plot(fit4), layout_matrix = mat)