ggplot2 over multiple pages - r

I have generated some partial dependence plots.
library(mlr)
plots = plotPartialDependence(pd)
The output looks like this:
class(plots)
[1] "gg" "ggplot"
pd
Per default, this function is printing the plots on one page. However, since there are many plots I can´t see any details. Is there a way to print the plots on multiple pages (i.e. 4 plots per page e.g. nrows = 2/ncols = 2)?
I have read some posts on this topic but they are dealing with plots which were generated by the user, not by a function. So, this doesn't helped me.
Here is small example of 5 features.
structure(list(data = structure(list(review_count = c(73.1921519112757,
72.9381584023148, 72.9381584023148, 72.9381584023148, 72.9381584023148,
63.1251979284659, 63.1251979284659, 63.1251979284659, 63.1251979284659,
63.1251979284659, 45.1564179015755, 45.1564179015755, 45.1564179015755,
45.1564179015755, 45.1564179015755, 70.3673395995618, 70.3673395995618,
70.3673395995618, 70.3673395995618, 70.3673395995618, 62.363785022433,
61.3743337919256, 61.3743337919256, 61.3743337919256, 61.3743337919256,
64.3075754021323, 64.3075754021323, 64.3075754021323, 64.3075754021323,
64.3075754021323, 58.1782568771601, 58.1716123314153, 58.1716123314153,
58.1716123314153, 58.1716123314153, 95.6300994996321, 95.6300994996321,
95.6300994996321, 95.6300994996321, 95.6300994996321, 65.8695037727425,
66.679524424974, 66.679524424974, 66.679524424974, 66.679524424974,
43.4884670405162, 43.4884670405162, 43.4884670405162, 43.4884670405162,
43.4884670405162), diveyTrue = c(0, 0.111111111111111, 0.222222222222222,
0.333333333333333, 0.444444444444444, 0.555555555555556, 0.666666666666667,
0.777777777777778, 0.888888888888889, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), dinnerTrue = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 0, 0.111111111111111, 0.222222222222222, 0.333333333333333,
0.444444444444444, 0.555555555555556, 0.666666666666667, 0.777777777777778,
0.888888888888889, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA), BikeParkingTrue = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0.111111111111111,
0.222222222222222, 0.333333333333333, 0.444444444444444, 0.555555555555556,
0.666666666666667, 0.777777777777778, 0.888888888888889, 1, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), latenightTrue = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, 0, 0.111111111111111, 0.222222222222222,
0.333333333333333, 0.444444444444444, 0.555555555555556, 0.666666666666667,
0.777777777777778, 0.888888888888889, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), NoiseLevelquiet = c(NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 0, 0.111111111111111, 0.222222222222222, 0.333333333333333,
0.444444444444444, 0.555555555555556, 0.666666666666667, 0.777777777777778,
0.888888888888889, 1)), row.names = c(NA, -50L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x0000000002521ef0>),
task.desc = structure(list(id = "dat", type = "regr", target = "review_count",
size = 9943L, n.feat = c(numerics = 79L, factors = 0L,
ordered = 0L, functionals = 0L), has.missings = TRUE,
has.weights = FALSE, has.blocking = FALSE, has.coordinates = FALSE), class = c("RegrTaskDesc",
"SupervisedTaskDesc", "TaskDesc")), target = c("diveyTrue",
"dinnerTrue", "BikeParkingTrue", "latenightTrue", "NoiseLevelquiet"
), features = c("diveyTrue", "dinnerTrue", "BikeParkingTrue",
"latenightTrue", "NoiseLevelquiet"), derivative = FALSE,
interaction = FALSE, individual = FALSE), class = "PartialDependenceData")

Related

Creating new column with values from multiple other columns

I hope someone can help me with this one!
I have the following dataset and want to create a new column where the values of aver1, aver2 and aver3 are represented.
I tried it with rowSums but this did not work for me because when i put na.rm = TRUE also those rows who have only empty columns have 0 as their sum and I can not differentiate these from the ones that actually do have 0 as their value.
What I have:
count
aver1.
aver2.
aver3.
X
NA
1
NA
Y
1
NA
NA
X
NA
NA
0
What I want:
count
aver1.
aver2.
aver3.
aver_all
X
NA
1
NA
1
Y
1
NA
NA
1
X
NA
NA
0
0
the dput output:
structure(list(count = c(0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,
1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0,
0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,
0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1,
1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
1), start = c(NA, NA, NA, 5, NA, NA, NA, NA, 1, NA, NA, NA, NA,
1, 1, 1, NA, NA, 9, NA, NA, NA, 3, 4, NA, 11, 1, NA, NA, 1, NA,
NA, NA, 6, NA, NA, 5, NA, 5, NA, NA, NA, NA, NA, 1, NA, 3, NA,
NA, 3, 1, NA, 13, NA, 0, NA, NA, NA, NA, 1, NA, NA, NA, 12, 1,
NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, 1, NA, NA, NA, NA,
2, NA, 2, NA, NA, NA, 2, NA, NA, 1, NA, 3, NA, 3, NA, NA, NA,
NA, 10, NA, 1, NA, 0, 0, 1, 1, NA, NA, NA, NA, NA, 1, NA, 2,
7, NA, 1, NA, NA, 3, NA, 2, 6, NA, 3, NA, 1, 8, 1, NA, 1, NA,
NA, 0, NA, 0, 1, NA, NA, NA, NA, 3, NA, 0, NA, NA, NA, 1, NA,
NA, 0, NA, NA, NA, NA, NA, 2, NA, NA, 0, NA, NA, NA, NA, NA,
NA, 1, NA, 4), aver1 = c(NA, NA, NA, 0.5, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 0.166666666666667, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 0.133333333333333, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, 0.266666666666667, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 0.566666666666667, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 0.266666666666667, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), aver2 = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 0.333333333333333, 0.416666666666667, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.25, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.916666666666667,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.472222222222222,
NA, NA, NA, NA, NA, NA, 0.388888888888889, NA, NA, NA, 0.0833333333333333,
NA, NA, NA, NA, 0.0555555555555556, NA, 0.111111111111111, NA,
NA, NA, NA, NA, NA, NA, NA, 0.305555555555556, NA, 0.861111111111111,
NA, NA, NA, NA, NA, NA, NA, NA, 0.194444444444444, NA, NA, NA,
NA, NA, 0.611111111111111, NA, NA, NA, NA, 0, NA, 1, NA, 0.694444444444444,
NA, NA, NA, NA, 0.5, NA, 1, NA, NA, NA, NA, NA, 0.0277777777777778,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.138888888888889,
NA, NA, 0.583333333333333, NA, NA, NA, NA, NA, NA, 0.194444444444444,
NA, NA), aver3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA, 0.514285714285714,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 0.0285714285714286, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 1, 0.214285714285714, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.0142857142857143, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 0.614285714285714, NA, NA, NA, NA, 0.371428571428571,
NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA,
NA, NA, NA, 0.9, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.0571428571428571,
NA, NA, 0.128571428571429, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 0.1)), row.names = c(NA, -170L
), class = c("tbl_df", "tbl", "data.frame"))
This is an example that allows you to sum your selected variables from your data-frame (let's call this data-frame: 'df').
df$aver_all <- apply(df[, c("aver1", "aver2", "aver3")], 1, function(x) sum(x, na.rm=TRUE))
It will add 0s to rows where there are only NAs for aver1-2-3.
The next code will replace by NAs, the rows with full NAs.
df$aver_all <- apply(df[, c("aver1", "aver2", "aver3")], 1, function(x) ifelse(FALSE %in% is.na(x), sum(x, na.rm=TRUE), NA))
Given that you have said that you also have rows where all column values are NAs, I will create an additional row in your dataset that fulfills this condition:
dataset <- tibble(count = c("X", "Y", "X", "Z"), aver1. = c(NA, 1, NA, NA),
aver2. = c(1, NA, NA, NA), aver3. = c(NA, NA, 0, NA))
You can use the conditional case_when (https://dplyr.tidyverse.org/reference/case_when.html), which will allow you to set values depending on the conditions you choose for each row. In this case, you could use:
dataset$aver_all <- case_when(is.na(aver1.) & is.na(aver2.) & is.na(aver3.) ~ NA_real_,
aver1. | aver2. | aver3. ~ 1,
TRUE ~ 0)
Here the first condition sets rows where all values are NA to NA, the second sets a 1 if at least one of the three values of a row is a 1; and finally if none of these conditions is satisfied, a 0 is set.

Geom_rect() removed after log2 transformation

(I am aware of a similar issue discussed here but not able to get these solutions to work)
I used this code to successfully create this plot with a linear scale on the y axis. The important bit is the geom_rect() that creates the blue lines that later disappear when I transform the y axis to a log2 scale.
plot <- ggplot(data, aes(x=ï.., y=Casirivimab)) + geom_point(size = 1)
#plot <- plot + scale_y_continuous(trans='log2', breaks = trans_breaks("log2", function(x) 2^x),labels = trans_format("log2", math_format(2^.x)))
plot <- plot + geom_rect(aes(xmin=ï..-.1, xmax=ï..+.1, ymin=-Inf, ymax=Inf, fill = Cas.Epitope), alpha=0.5, stat="identity")
plot <- plot + scale_fill_manual(values = c("x"="blue"), na.value= "grey92")
plot <- plot + coord_cartesian(xlim = c(340,510))
plot <- plot + theme(panel.background = element_rect(colour = "grey92", fill = "grey92"))
plot <- plot + labs(x = "amino acid position", y = "fold change", title = "Casirivimab", color = "Epitope Position")
plot_Cas <- plot
plot_Cas
This was the resultant plot
Once I add in the log 2 transformation the log2 transformation the blue lines created by geom_rect dissappear. How do I prevent these blue lines disappearing when I transform the axis to a log2 scale?
plot <- ggplot(data, aes(x=ï.., y=Casirivimab)) + geom_point(size = 1)
**plot <- plot + scale_y_continuous(trans='log2', breaks = trans_breaks("log2", function(x) 2^x),labels = trans_format("log2", math_format(2^.x)))**
plot <- plot + geom_rect(aes(xmin=ï..-.1, xmax=ï..+.1, ymin=-Inf, ymax=Inf, fill = Cas.Epitope), alpha=0.5, stat="identity")
plot <- plot + scale_fill_manual(values = c("x"="blue"), na.value= "grey92")
plot <- plot + coord_cartesian(xlim = c(340,510))
plot <- plot + theme(panel.background = element_rect(colour = "grey92", fill = "grey92"))
plot <- plot + labs(x = "amino acid position", y = "fold change", title = "Casirivimab", color = "Epitope Position")
plot_Cas <- plot
plot_Cas
The is the resulting plot:
Many thanks for your help in advance.
P.s. here is the data set from which the data plotted on the graphs is taken. The plotted data is for "Casirivimab" only.
structure(list(ï.. = c(18L, 69L, 80L, 141L, 215L, 222L, 241L,
246L, 247L, 321L, 333L, 334L, 335L, 337L, 339L, 340L, 341L, 343L,
344L, 345L, 346L, 348L, 351L, 354L, 357L, 359L, 360L, 361L, 367L,
378L, 384L, 403L, 405L, 406L, 408L, 409L, 415L, 416L, 417L, 417L,
417L, 420L, 421L, 435L, 439L, 440L, 441L, 444L, 444L, 445L, 446L,
447L, 448L, 449L, 450L, 452L, 452L, 453L, 455L, 456L, 456L, 456L,
457L, 458L, 460L, 470L, 472L, 473L, 474L, 475L, 475L, 476L, 477L,
478L, 478L, 479L, 481L, 482L, 483L, 484L, 484L, 485L, 486L, 486L,
486L, 486L, 486L, 487L, 488L, 489L, 490L, 490L, 492L, 493L, 494L,
494L, 495L, 496L, 498L, 500L, 501L, 502L, 503L, 504L, 505L, 508L,
509L, 519L, 537L, 570L, 583L, 655L, 681L, 681L, 692L, 701L, 716L,
859L, 982L, 1118L, 1147L, 1163L, 1229L), Mutation = c("L18F",
"Δ69-70", "D80A", "Δ141-146", "D215G", "A222V", "Δ242-247",
"R246I", "S247R", "Q321L", NA, NA, NA, NA, NA, NA, "V341I", NA,
NA, NA, NA, "A348T", NA, "N354D", NA, "S359N", NA, NA, "V367F",
"K378R", "P384L", NA, NA, "E406W", "R408I", "Q409E", NA, NA,
"K417E", "K417N", "K417T", NA, NA, "A435S", "N439K", "N440K",
NA, "K444Q", "K444T", "V445A", "G446V", NA, NA, "Y449N", "N450D",
"L452Q", "L452R", "Y453F", "L455F", "F456A", "F456K", "F456R",
NA, "K458R", "N460T", NA, "I472V", NA, NA, "A475R", "A475V",
"G476S", "D.2 (S477N)", "T478I", "T478K", "P479S", NA, NA, "V483A",
"E484K", "E484Q", "G485D", "F486K", "F486L", "F486R", "F486S",
"F486V", "N487R", NA, NA, "F490L", "F490S", NA, "Q493K", "S494P",
"S494R", NA, NA, NA, NA, "N501Y", NA, NA, NA, NA, "Y508H", NA,
"H519P", "K537R", "A570D", "E583D", "H655Y", "P681H", "P681R",
"I692V", "A701V", "T716I", "T859N", "S982A", "D1118H", "S1147L",
"D1163Y", "M1229I"), Cas.Epitope = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, "x", NA, NA, NA, NA, NA,
NA, NA, "x", "x", NA, "x", NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, "x", "x", "x", NA, NA, NA, NA, NA, NA, NA,
NA, NA, "x", "x", "x", NA, NA, NA, NA, NA, NA, NA, "x", "x",
"x", "x", "x", "x", "x", "x", "x", "x", "x", NA, NA, NA, "x",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Casirivimab = c(0.766666667,
1.2, 0.5, 0.9, 1.2, 1.25, 0.866666667, 0.7, NA, 1.6, NA, NA,
NA, NA, NA, NA, 0.8, NA, NA, NA, NA, 1, NA, 1.4, NA, 0.5, NA,
NA, 0.6, 0.8, 1.9, NA, NA, 84.4, 0.5, 1.3, NA, NA, 62.8, 34.8,
7.1, NA, NA, 1.1, 1.22, 1, NA, 0.95, 2, 1.75, 0.4, NA, NA, NA,
1.4, 5.8, 3.966666667, 73.91428571, 89.95, NA, NA, 3, NA, 0.8,
NA, NA, 2.2, NA, NA, 44.4, NA, 3.3, 2.45, 0.866666667, 2.9, 0.9,
NA, NA, 0.4, 18.84166667, 26.5, 3.7, 100, 48.6, 100, 100, 75.2,
100, NA, NA, 2.15, 0.866666667, NA, 42.66666667, 2.966666667,
0.8, NA, NA, NA, NA, 0.9, NA, NA, NA, NA, 1.1, NA, 0.7, 1, 0.433333333,
1, 1.2, 0.833333333, 1.2, 0.3, 0.7, 0.366666667, 1.3, 1, 0.9,
2.1, 0.8, 1.8), Bam.Epitope = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x",
"x", NA, "x", NA, "x", "x", "x", "x", NA, NA, NA, NA, "x", NA,
NA, NA, NA, NA, NA, NA, NA, NA, "x", "x", "x", "x", "x", "x",
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x",
"x", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Bamlanivimab = c(NA,
0.5, NA, NA, NA, 0.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 0.4, NA, NA, NA, NA, 1.3, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 100, 1.55, NA, NA, NA, 4.2,
NA, NA, NA, NA, NA, NA, NA, 2.5, NA, NA, 1.1, 2.6, NA, NA, NA,
NA, NA, 100, 100, NA, NA, NA, 100, NA, NA, 0.9, NA, NA, 100,
100, NA, NA, 100, 100, NA, NA, NA, NA, 1.1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA), Ete.Epitope = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x", NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, "x", "x", "x", "x", "x", "x", "x", NA,
"x", "x", "x", "x", NA, NA, NA, NA, "x", "x", "x", "x", "x",
NA, "x", "x", "x", "x", NA, "x", "x", "x", "x", "x", "x", "x",
NA, NA, "x", "x", "x", "x", "x", "x", NA, NA, NA, NA, NA, NA,
"x", "x", NA, "x", "x", "x", "x", "x", "x", NA, "x", NA, NA,
NA, "x", "x", "x", "x", NA, NA, NA, "x", "x", NA, "x", "x", NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA), Etesevimab = c(0.6, 0.65, NA, 0.6, NA, 1.2, 0.2, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 83, 49,
NA, NA, NA, 0.35, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
1.4, 1.4, NA, 14.9, 32.6, 100, NA, NA, 100, NA, NA, NA, NA, 100,
16.7, NA, 0.6, 0.6, NA, NA, NA, NA, NA, 3.125, 1.3, NA, NA, 2.9,
17.9, NA, NA, 100, NA, NA, 4.5, 0.8, NA, NA, 0.55, 3.3, NA, NA,
NA, NA, 2.25, NA, NA, NA, NA, NA, NA, NA, NA, 0.2, 0.3, 0.5,
0.5, NA, NA, NA, 0.4, NA, 0.8, 0.5, NA, 0.7, NA), Imde.Epitope = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, "x", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x", "x", "x",
"x", "x", "x", "x", "x", "x", "x", "x", "x", NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, "x", "x", NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), Imdevimab = c(0.7, 0.65, 0.6, 0.95, 0.7, 0.675, 0.433333333,
0.7, NA, 1.2, NA, NA, NA, NA, NA, NA, 0.8, NA, NA, NA, NA, 0.7,
NA, 0.7, NA, 0.6, NA, NA, 0.4, 0.6, 1.3, NA, NA, 100, 0.4, 1,
NA, NA, 1.166666667, 0.566666667, 1.1, NA, NA, 1, 24.66, 95.6,
NA, 68, 100, 68.26666667, 58.35, NA, NA, NA, 18.6, 4.4, 3.15,
1.5625, 1.2, NA, NA, 0.3, NA, 0.4, NA, NA, 1, NA, NA, 0.3, NA,
0.5, 1.375, 0.933333333, 1.4, 1.6, NA, NA, 0.6, 2.169230769,
1.1, 2.2, 0.4, 0.8, 0.3, 0.4, 2.05, 0.1, NA, NA, 2.933333333,
2.35, NA, 2.3, 1.233333333, 3.2, NA, NA, NA, NA, 0.633333333,
NA, NA, NA, NA, 0.7, NA, 0.5, 1.2, 0.466666667, 1, 1.3, 0.766666667,
0.9, 0.6, 0.8, 0.433333333, 1.2, 1.233333333, 0.733333333, 0.9,
1, 0.3), Sotro.Epitope = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", NA,
NA, "x", "x", "x", "x", "x", NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x", NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, "x", NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), Sotrovimab = c("1.1", "0.8",
NA, "0.8", NA, "0.8", "0.5", NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, "0.7", "1", NA, NA, NA, "1.05",
NA, NA, NA, NA, NA, NA, NA, NA, "#DIV/0!", NA, NA, NA, "1", NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "#DIV/0!", "0.5",
"0.7", NA, NA, NA, NA, NA, "0.45", NA, NA, NA, "1.5", NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, "0.8", NA, NA, NA, NA, NA, "2.35",
NA, NA, NA, NA, NA, NA, NA, NA, "1.8", "1.1", "0.8", "0.7", NA,
NA, NA, "1", NA, "0.7", "0.5", NA, "#DIV/0!", NA), Regdan.Epitope = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "x",
NA, NA, NA, NA, NA, NA, "x", "x", "x", NA, NA, NA, NA, NA, NA,
NA, NA, NA, "x", NA, NA, "x", "x", "x", "x", "x", "x", "x", "x",
"x", NA, NA, NA, "x", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, "x", NA, NA, NA, "x", "x", "x", "x", "x", NA, NA, "x",
"x", "x", "x", "x", "x", "x", "x", "x", "x", NA, NA, NA, NA,
NA, "x", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), Regdanivimab = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 0.7, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 35, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, 8.7, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 5.5,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-123L))

How to plot an igraph object on a vector map in R

I use the igraph and sf packages.
I have an igraph object whose vertices have spatial coordinates geo_dist_graph.
The vertices names and coordinates look like this:
grid_grid <-
structure(list(coords.x1 = c(15.504078, 15.704078, 15.904078,
15.104078, 15.304078, 15.504078, 15.704078, 15.104078, 15.304078,
15.704078, 14.904078, 14.304078, 13.904078, 14.704078, 13.704078,
14.104078, 14.704078, 14.904078, 13.704078, 13.904078, 14.704078,
13.704078, 13.904078, 14.304078),
coords.x2 = c(43.835623, 43.835623,
43.835623, 44.035623, 44.035623, 44.035623, 44.035623, 44.235623,
44.235623, 44.235623, 44.435623, 44.635623, 44.835623, 44.835623,
45.035623, 45.035623, 45.035623, 45.035623, 45.235623, 45.235623,
45.235623, 45.435623, 45.435623, 45.435623),
g9.nodes = c(27,
28, 29, 40, 41, 42, 43, 55, 56, 58, 69, 81, 94, 98, 108, 110,
113, 114, 123, 124, 128, 138, 139, 141)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"
))
The graph is from a simple squared adjacency matrix:
geo_dist_graph <-
structure(c(NA, 1, 1, NA, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, NA,
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1, 1, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA,
NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 1, NA, 1, NA, NA, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA,
1, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1, 1, 1, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA,
NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 1, 1, 1, NA, 1, NA, 1, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, NA,
1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, NA, NA, 1, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 1, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, 1,
NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1, 1, NA, NA, NA, NA, 1, 1, NA, NA, 1, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, NA,
NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1, 1, NA, 1, NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, 1,
NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 1, NA, NA, 1, NA, NA, NA, 1, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA,
NA, 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, 1, NA, 1, 1, NA, NA, 1, NA, NA, 1, 1, 1, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, 1, 1, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, 1, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1,
1, NA, 1, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 1, NA, NA, NA, 1, NA, NA, 1, NA),
.Dim = c(24L,
24L))
colnames(geo_dist_graph) <- grid_grid$g9.nodes
row.names(geo_dist_graph) <- grid_grid$g9.nodes
geo_dist_graph <- graph_from_adjacency_matrix(geo_dist_graph, mode = "upper", diag = F)
The spatial coordinates where attched this way:
V(geo_dist_graph)$x <-
grid_grid$coords.x1[match(V(geo_dist_graph)$name, grid_grid$g9.nodes)]
V(geo_dist_graph)$y <-
grid_grid$coords.x2[match(V(geo_dist_graph)$name, grid_grid$g9.nodes)]
The graph is correclty plotted in space when using the plot function. But when I try to add a basemap like this plot(map_crop_sp, add = T), the map doesn't show behind the graph, but there is no error message.
The map is vector map, don't know if it's important. Here is the code used to create it.
map <- st_read("ne_10m_coastline/ne_10m_coastline.shp")
map_crop <- st_crop(map, xmin = 13.304078, ymin = 43.635623, xmax = 16.503846, ymax = 45.60185)
map_crop_sp <- as(map_crop, Class = "Spatial")
Answer
Since the igraph should be on top of the map, I plot it second. I also added rescale = F:
plot(map_crop_sp)
plot(geo_dist_graph, add = T, rescale = F)
Rationale
I typed ?plot.igraph. From there, I found ?igraph.plotting. It seems that plotting an igraph object rescales it (plot(..., rescale = TRUE):
Logical constant, whether to rescale the coordinates to the [-1,1]x-1,1 interval. This parameter is not implemented for tkplot.
Defaults to TRUE, the layout will be rescaled.

Matrix Corrrelation in R

I am trying to create a correlation matrix with R but I am having problems. All the tutorials usually use very small datasets, however, I need to select 8 rows from a big dataset and one more variable that's average of two rows. I am not sure how to do the part where I select specific rows. Can someone help me out with that? I would really appreciate any help.
Someone asked me for a sample:
"NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 0.1577, NA, 0.2197, NA, 0.348,
NA, 0.086, NA, NA, NA, NA, NA, NA, NA, NA, 0.3768, NA, 0.2163,
NA, 0.336, NA, 0.329, NA, NA, NA, NA, NA, NA, NA, NA, 0.2881,
NA, 0.0632, NA, 0.235, NA, 0.167, NA, NA, NA, NA, NA, NA,
NA, NA, 0.2076, NA, 0.3705, NA, 0.164, NA, 0.255, NA, NA,
NA, NA, NA, NA, NA, NA, 0.1795, NA, 0.3649, NA, 0.246, NA,
0.628, NA, NA, NA, NA, NA, NA, NA, NA, 0.0227, NA, 0.3975,
NA, 0.176, NA, 0.13, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 0.5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
0.6333, NA, 0.3627, NA, 0.603, NA, 0.408, NA, NA, NA, NA,
NA, NA, NA, NA, 0.6667, NA, 0.8889, NA, 0.6, NA, 0.6, NA,
NA, NA, NA, NA, NA, NA, NA, 0.0545, NA, 0.2547, NA, 0.431,
NA, 0.126, NA, NA, NA, NA, NA, NA, NA, NA, 0.2388, NA, 0.5514,
NA, 0.32, NA, 0.424, NA, NA, NA, NA, NA, NA, NA, NA, 0.6667,
NA, 0.3867, NA, 0.313, NA, 0.75, NA, NA, NA, NA, NA, NA,
NA, NA, 0.752, NA, 0.482, NA, 0.349, NA, 0.24, NA, NA, NA,
NA, NA, NA, NA, NA, 0.5161, NA, 0.641, NA, 0.643, NA, 0.438,
NA, NA, NA, NA, NA, NA, NA, NA, 0.3492, NA, 0.3, NA, 0.391,
NA, 0.645, NA, NA, NA, NA, NA, NA, NA, NA, 0.3531, NA, 0.5755,
NA, 0.667, NA, 0.751, NA, NA, NA, NA, NA, NA, NA, NA, 0.2941,
NA, 0.5119, NA, 0.294, NA, 0.526, NA, NA, NA, NA, NA, NA,
NA, NA, 0.2941, NA, 0.1515, NA, 0.3, NA, 0.124, NA, NA, NA, "
Lets say you have a file with 110 rows and 84 columns (this makes your matrix size of 9240).
For reading you file (if your data present in a file)
data <- data.frame(read.csv("file.txt", header=TRUE, sep="\t"))
Use header "TRUE" if you have header in your file else use "FALSE".
Now select any rows according to your need.
For 1 row only (with all columns):
your_df <- data[1,]
For rows 1 to 10 only (with all columns):
your_df <- data[1:10,]
For rows 1, 3 and 10 rows (with all columns):
your_df <- data[c(1,3,10),]
Similarly you can select any columns by entering values after comma in square bracket.
For 3rd row and 2nd column:
your_df <- data[3,2]
For rows from 1st to 10th and columns from 51th to 60th:
your_df <- data[1:10,51:60]

How to further format forest Plots in R, from the metafor package?

I'm quite new to R and have been struggling with properly formatting a forest plot I've created.
When I click the "zoom" option in R to open the graph in a new window, it looks as such:
Forest Plot Currently
My main goal is to get the forest plot as compact as possible, i.e. publication quality/style. I currently have wayyyy too much white space in my plot. I think it has something to do with me messing around with the par() function, and now have no clue how to revert to defaults.
#Metafor library
library(metafor)
#ReadXL library to import excel sheet
library(readxl)
#Name the data sheet from the excel file
ACDF<- read_excel("outpatient_ACDF_meta_analysis.xlsx")
#View the data sheet with view(ACDF)
par(mar=c(20,1,1,1))
#This below measures with risk ratios. If you want to measure odds ratios, use argument measure=OR
returnop <- escalc(measure="OR", ai=op_return_OR, bi=op_no_return_OR, ci=ip_return_OR, di=ip_no_return_OR, data=ACDF)
#Generate a Random Effects Model
REmodel<-rma(yi=yi, vi=vi, data=returnop, slab=paste(Author, Year, sep=", "), method="REML")
#Generate a forest plot of the data
forest(REmodel, xlim=c(-17, 6),
ilab=cbind(ACDF$op_return_OR, ACDF$op_no_return_OR, ACDF$ip_return_OR, ACDF$ip_no_return_OR),
ilab.xpos=c(-9.5,-8,-6,-4.5), cex=.75, ylim=c(-1, 27),
psize=1)
### add column headings to the plot
text(c(-9.5,-8,-6,-4.5), 26, c("Return+", "Return-", "Return+", "Return-"))
text(c(-8.75,-5.25), 27, c("Outpatient", "Inpatient"))
text(-16, 26, "Study", pos=4)
text(6, 26, "Log Odds Ratio [95% CI]", pos=2)
I'm not 100% as to how to provide my data otherwise, but I used the dput function to provide as follows. Apologies for the N/As, still fleshing out the data for the future.
structure(list(Study = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), Author = c("Stieber", "Villavicencio",
"Lied", "Liu", "Garringer", "Joseffer", "Trahan", "Lied", "Sheperd",
"Talley", "Martin", "McGirt", "Adamson", "Fu", "Arshi", "Khanna",
"McClelland", "Purger", "McLellend2", NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Year = c(2005, 2007,
2007, 2009, 2010, 2010, 2011, 2012, 2012, 2013, 2015, 2015, 2016,
2017, 2017, 2017, 2017, 2017, 2017, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), op_return_OR = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 1, 3, 2, 16, 257, 7, NA, 5, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), op_no_return_OR = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
596, 769, 992, 4581, 958, 1749, NA, 3120, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), ip_return_OR = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 8, 9, 2, 257, 2034, 12, NA,
200, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), ip_no_return_OR = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 589, 641, 482, 16171, 8930, 1744, NA, 46312, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), op_death = c(NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, 1, NA,
1, 0, NA, 2, NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), op_no_death = c(NA, NA, NA, 45, NA,
NA, NA, NA, NA, NA, 596, NA, 993, 4597, NA, 1754, NA, 3125, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), ip_death = c(NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, 0, NA,
0, 42, NA, 2, NA, 20, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA), ip_no_death = c(NA, NA, NA, 64,
NA, NA, NA, NA, NA, NA, 597, NA, 484, 16386, NA, 1754, NA, 46492,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
2979.79797979798), op_thrombo = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 0, NA, NA, 8, 20, 4, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), op_no_thrombo = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 597, NA, NA, 4589, 1195,
1752, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), ip_thrombo = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 2, NA, NA, 67, 150, 4, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), ip_no_thrombo = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 595, NA, NA, 16361, 10814,
1752, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), op_stroke = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 0, NA, NA, 2, 12, 0, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), op_no_stroke = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 597, NA, NA, 4595, 1203,
1756, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), ip_stroke = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, 2, NA, NA, 14, 132, 0, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), ip_no_stroke = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 595, NA, NA, 16414, 10832,
1756, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA), op_dysphagia = c(NA, NA, NA, 0, NA, NA,
NA, NA, NA, NA, NA, NA, 11, NA, NA, NA, NA, 2, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), op_no_dysphagia = c(NA,
NA, NA, 45, NA, NA, NA, NA, NA, NA, NA, NA, 618, NA, NA, NA,
NA, 49, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), ip_dysphagia = c(NA, NA, NA, 1, NA, NA, NA, NA,
NA, NA, NA, NA, 1, NA, NA, NA, NA, 59, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), ip_no_dysphagia = c(NA,
NA, NA, 63, NA, NA, NA, NA, NA, NA, NA, NA, 273, NA, NA, NA,
NA, 2917, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA), op_hematoma = c(NA, NA, NA, 0, NA, NA, NA, NA,
NA, NA, NA, NA, 1, NA, NA, NA, 1, 4, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), op_no_hematoma = c(NA,
NA, NA, 45, NA, NA, NA, NA, NA, NA, NA, NA, 629, NA, NA, NA,
2015, 47, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA), ip_hematoma = c(NA, NA, NA, 1, NA, NA, NA, NA,
NA, NA, NA, NA, 1, NA, NA, NA, 273, 65, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), ip_no_hematoma = c(NA,
NA, NA, 63, NA, NA, NA, NA, NA, NA, NA, NA, 273, NA, NA, NA,
7791, 1713, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA)), .Names = c("Study", "Author", "Year", "op_return_OR",
"op_no_return_OR", "ip_return_OR", "ip_no_return_OR", "op_death",
"op_no_death", "ip_death", "ip_no_death", "op_thrombo", "op_no_thrombo",
"ip_thrombo", "ip_no_thrombo", "op_stroke", "op_no_stroke", "ip_stroke",
"ip_no_stroke", "op_dysphagia", "op_no_dysphagia", "ip_dysphagia",
"ip_no_dysphagia", "op_hematoma", "op_no_hematoma", "ip_hematoma",
"ip_no_hematoma"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-35L))
The par option looks ok to me. I changed the ylim option and modified the y location and size of some of the header text as below:
#Generate a forest plot of the data
forest(REmodel, xlim=c(-17, 6),
ylim=c(-1, 10),
ilab=cbind(ACDF$op_return_OR, ACDF$op_no_return_OR, ACDF$ip_return_OR,
ACDF$ip_no_return_OR),
ilab.xpos=c(-9.5,-8,-6,-4.5), cex=.75,
psize=1)
### add column headings to the plot
text(c(-9.5,-8,-6,-4.5), 8.5, c("Return+", "Return-", "Return+", "Return-"),
cex = 0.65)
text(c(-8.75,-5.25), 9.5, c("Outpatient", "Inpatient"))
text(-17, 8.5, "Study", pos=4)
text(6, 8.5, "Log Odds Ratio [95% CI]", pos=2)
This gives the following plot:

Resources