Skip to content

Commit a6defd3

Browse files
authored
Merge pull request #677 from remlapmot/devel-2026-03-30
Some further code optimizations
2 parents 1f5ea53 + 40f3ba3 commit a6defd3

6 files changed

Lines changed: 29 additions & 19 deletions

File tree

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: TwoSampleMR
22
Title: Two Sample MR Functions and Interface to MRC Integrative
33
Epidemiology Unit OpenGWAS Database
4-
Version: 0.7.2
4+
Version: 0.7.3
55
Authors@R: c(
66
person("Gibran", "Hemani", , "g.hemani@bristol.ac.uk", role = c("aut", "cre"),
77
comment = c(ORCID = "0000-0003-0920-1055")),

NEWS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# TwoSampleMR v0.7.3
2+
3+
(Release date 2026-03-31)
4+
5+
* Some further code optimizations.
6+
17
# TwoSampleMR v0.7.2
28

39
(Release date 2026-03-30)

R/format_mr_results2.R

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,13 @@ combine_all_mrresults <- function(
146146
het <- het[, c("id.exposure", "id.outcome", "method", "Q", "Q_df", "Q_pval")]
147147

148148
# Convert all factors to character
149-
res[] <- lapply(res, function(x) if (is.factor(x)) as.character(x) else x)
150-
het[] <- lapply(het, function(x) if (is.factor(x)) as.character(x) else x)
151-
sin[] <- lapply(sin, function(x) if (is.factor(x)) as.character(x) else x)
149+
factors_to_character <- function(df) {
150+
df[] <- lapply(df, function(x) if (is.factor(x)) as.character(x) else x)
151+
df
152+
}
153+
res <- factors_to_character(res)
154+
het <- factors_to_character(het)
155+
sin <- factors_to_character(sin)
152156

153157
sin <- sin[grep("[:0-9:]", sin$SNP), ]
154158
sin$method <- "Wald ratio"
@@ -285,10 +289,10 @@ combine_all_mrresults <- function(
285289
power_prune <- function(dat, method = 1, dist.outcome = "binary") {
286290
# dat[,c("eaf.exposure","beta.exposure","se.exposure","samplesize.outcome","ncase.outcome","ncontrol.outcome")]
287291
if (method == 1) {
288-
L <- NULL
289292
id.sets <- paste(split_exposure(dat)$exposure, split_outcome(dat)$outcome)
290293
id.set.unique <- unique(id.sets)
291294
dat$id.set <- as.numeric(factor(id.sets))
295+
L <- vector("list", length(id.set.unique))
292296
for (i in seq_along(id.set.unique)) {
293297
# print(i)
294298
print(paste(
@@ -334,7 +338,7 @@ power_prune <- function(dat, method = 1, dist.outcome = "binary") {
334338
dat1 <- dat1[nexp == nexp[1], ]
335339
L[[i]] <- dat1
336340
}
337-
dat <- do.call(rbind, L)
341+
dat <- data.table::rbindlist(L)
338342
dat <- dat[, !names(dat1) %in% c("id.set", "id.subset")]
339343
# if (drop.duplicates == T) {
340344
# dat<-dat[dat$power.prune=="keep",]
@@ -343,17 +347,17 @@ power_prune <- function(dat, method = 1, dist.outcome = "binary") {
343347
}
344348

345349
if (method == 2) {
346-
L <- NULL
347350
id.sets <- paste(split_exposure(dat)$exposure, split_outcome(dat)$outcome)
348351
id.set.unique <- unique(id.sets)
349352
dat$id.set <- as.numeric(factor(id.sets))
353+
L <- vector("list", length(id.set.unique))
350354
for (i in seq_along(id.set.unique)) {
351355
dat1 <- dat[id.sets == id.set.unique[i], ]
352356
# unique(dat1[,c("exposure","outcome")])
353357
id.subset <- paste(dat1$exposure, dat1$id.exposure, dat1$outcome, dat1$id.outcome)
354358
id.subset.unique <- unique(id.subset)
355359
dat1$id.subset <- as.numeric(factor(id.subset))
356-
L1 <- NULL
360+
L1 <- vector("list", length(id.subset.unique))
357361
for (j in seq_along(id.subset.unique)) {
358362
# print(j)
359363
print(paste("identifying best powered summary set: ", id.subset.unique[j], sep = ""))
@@ -405,12 +409,12 @@ power_prune <- function(dat, method = 1, dist.outcome = "binary") {
405409
# dat2$power<-power
406410
L1[[j]] <- dat2
407411
}
408-
L[[i]] <- do.call(rbind, L1)
412+
L[[i]] <- data.table::rbindlist(L1)
409413
}
410-
dat2 <- do.call(rbind, L)
414+
dat2 <- data.table::rbindlist(L)
411415
dat2 <- dat2[order(dat2$id.set, dat2$iv.se), ]
412416
id.sets <- unique(dat2$id.set)
413-
id.keep <- NULL
417+
id.keep <- vector("list", length(id.sets))
414418
for (i in seq_along(id.sets)) {
415419
# print(i)
416420
# print(id.sets[i])
@@ -450,6 +454,6 @@ size.prune <- function(dat) {
450454
dat$ncase[is.na(dat$ncase)] <- dat$samplesize[is.na(dat$ncase)]
451455
dat <- dat[order(dat$ncase, decreasing = TRUE), ]
452456
id.expout <- paste(dat$exposure, dat$outcome)
453-
id.keep <- id.expout[!duplicated(paste(dat$exposure, dat$originalname.outcome))]
457+
id.keep <- id.expout[!duplicated(data.frame(dat$exposure, dat$originalname.outcome))]
454458
dat <- dat[id.expout %in% id.keep, ]
455459
}

R/harmonise.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ harmonise_data <- function(exposure_dat, outcome_dat, action = 2) {
7070

7171
combs <- subset(
7272
res.tab,
73-
!duplicated(paste(id.exposure, id.outcome)),
73+
!duplicated(data.frame(id.exposure, id.outcome)),
7474
select = c(id.exposure, id.outcome)
7575
)
7676

R/other_formats.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ run_mr_presso <- function(dat, NbDistribution = 1000, SignifThreshold = 0.05) {
146146
dat <- subset(dat, mr_keep)
147147
d <- subset(
148148
dat,
149-
!duplicated(paste(id.exposure, " - ", id.outcome)),
149+
!duplicated(data.frame(id.exposure, id.outcome)),
150150
select = c(exposure, outcome, id.exposure, id.outcome)
151151
)
152152
res <- list()

R/rucker.R

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ PM <- function(y = y, s = s, Alpha = 0.1) {
3030
mode <- df - 1
3131
Quant <- c(low, mode, mn, med, up)
3232
L <- length(Quant)
33-
Tausq <- NULL
34-
Isq <- NULL
33+
Tausq <- numeric(L)
34+
Isq <- numeric(L)
3535
CI <- matrix(nrow = L, ncol = 2)
36-
MU <- NULL
36+
MU <- numeric(L)
3737
v <- 1 / s^2
3838
sum.v <- sum(v)
3939
typS <- sum(v * (k - 1)) / (sum.v^2 - sum(v^2))
@@ -77,7 +77,7 @@ mr_rucker <- function(dat, parameters = default_parameters()) {
7777
dat <- subset(dat, mr_keep)
7878
d <- subset(
7979
dat,
80-
!duplicated(paste(id.exposure, " - ", id.outcome)),
80+
!duplicated(data.frame(id.exposure, id.outcome)),
8181
select = c(exposure, outcome, id.exposure, id.outcome)
8282
)
8383
res <- list()
@@ -409,7 +409,7 @@ mr_rucker_jackknife <- function(dat, parameters = default_parameters()) {
409409
dat <- subset(dat, mr_keep)
410410
d <- subset(
411411
dat,
412-
!duplicated(paste(id.exposure, " - ", id.outcome)),
412+
!duplicated(data.frame(id.exposure, id.outcome)),
413413
select = c(exposure, outcome, id.exposure, id.outcome)
414414
)
415415
res <- list()

0 commit comments

Comments
 (0)