Использование функции fix () или edit () для изменения другой функции в R - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь отредактировать функцию в R, функция находится в пакете с именем 'TwoSampleMR', сама функция называется 'forest_plot_1_to_many', функция строит лесной график множественных воздействий на результат.

Я хочу изменить размер текста на графике, к сожалению, размер шрифта задан заранее и не может быть отредактирован при вызове функции. Поэтому я пытаюсь редактировать саму функцию. Много статей говорят об использовании trace () но это меня смущает, и я не думаю, что это то, что я ищу, потому что я не исправляю и не ошибаюсь в коде, я просто меняю его

одна статья, которую я видел, сказала, что используйте fix () или edit () для редактирования функции, поэтому я пытаюсь: исправить (fores_plot_1_to_many)

и в результате получил всплывающее окно редактирования, я делаю корректировку - 'size = 10' до 'size = 15'.

но тогда функция вообще не работает с ошибкой:

не удалось найти функцию "forest_plot_names2"

мой вопрос: можно ли fix () и edit () использовать для изменения функций?

рабочий пример:

install_github('MRCIEU/TWOSampleMR')
library(TwoSampleMR)
library(cowplot)
library(gridExtra)
library(ggplot2)
#you then need data formated like this(use dget):

структура (список (id.exposure = c ("1", "1", "1", "1", "1", "100", «104», «2», «2», «2», «2», «2», «72», «72», «72», «72», «72», «999», «999», «999», «999», «999»), id.outcome = c («7», «7», «7», «7», «7», «7», «7», «7», «7», «7», «7», «7», «7», «7», «7 », «7», «7», «7», «7», «7», «7», «7»), результат = структура (c (1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Ишемическая болезнь сердца || id: 7", класс = "фактор"), экспозиция = структура (с (1л, 1л, 1л, 1л, 1л, 2л, 3л, 4л, 4л, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c («Adiponectin || id: 1», «Окружность бедра || id: 100», «Окружность талии || id: 104», «Индекс массы тела || id: 2», «Соотношение талии и бедер || id: 72», "Жир тела || id: 999"), класс = "фактор"), метод = структура (c (2L, 5л, 1л, 3л, 6л, 1л, 4л, 2л, 5л, 1л, 3л, 6л, 2л, 5л, 1л, 3л, 6L, 2L, 5L, 1L, 3L, 6L), .Label = c («Взвешенная обратная дисперсия», «MR Egger», «Простой режим», «Коэффициент Вальда», «Средневзвешенная медиана», «Весовой режим»), класс = «фактор»), nsnp = c (14, 14, 14, 14, 14, 2, 1, 79, 79, 79, 79, 79, 30, 30, 30, 30, 30, 10, 10, 10, 10, 10), b = c (-0.117626170585508, -0.0897929616150017, -0.0859881930532524, -0.0481657038212953, -0.0924464446740587, -0,186310066104502, -0,446296296296296, 0,502493509729729, 0,387006481544447, 0,445909096953398, 0,34015542866459, 0,388824880964004, 0,319237123956867, 0,440777466374666, 0,479474060003586, 0,613267898718917, 0,539371930718197, -0,099234917723361, 0,492007216440334, 0,266451632000445, 0,625148495006193, 0,584255954193752), se = c (0,099327158876229, 0,052718121960683, 0,0701141773426372, 0,0805966230812049, 0,0480249872448083, 0,212900382630982, 0,348251851851852, 0,143960561723383, 0,073084143930427, 0,0589830187629256, 0,159504867346875, 0,103010766708134, 0,670839958692018, 0,130066610555476, 0,147334903140841, 0,314200209490734, 0,220010589431754, 1,62221372607913, 0,165297837802832, 0,329449407451525, 0,239252578485129, 0,171657887534756), pval = c (0,259248511221647, 0,0885183822967944, 0.220047295734388, 0.560363740959668, 0.0763956662641734, 0,381517091710096, 0,200006460243279, 0,000801258991849775, 1.18785466550157e-07, 4.03202032734861e-14, 0.0361057370718699, 0,000310917456068699, 0,637854263026472, 0,000701839665612893, 0,00113666506799647, 0,0606742038535203, 0,0204847853665443, 0,952722454601399, 0,00291569423908827, 0,418642505104635, 0.0281355793252735, 0.00782847174837027)), .Names = c ("id.exposure", «id.outcome», «исход», «экспозиция», «метод», «nsnp», «b», «se»,"pval"), row.names = c (NA, -22L), class = "data.frame")

#once you have the data saved as a dataframe you can use 
res1<-subset_on_method(res1)
res1<-sort_1_to_many(res1,b="b",sort_action=4)
forest_plot_1_to_many(res1,b="b",se="se",
                       exponentiate=F,ao_slc=F,lo=NULL,up=NULL,
                       TraitM="exposure",col1_width=1.3,by=NULL,
                       trans="identity",xlab= "(95% confidence interval)",
                       addcols=c("nsnp","b","se","pval"),addcol_widths=c(0.6,1.1,1.1,1.1),
                       addcol_titles=c("No.SNPs","Beta", "se","P-val")  
)  
#this will give a goo looking forest plot, you can then try edit the function using fix() or edit()
fix(forest_plot_1_to_many)
## OR 
var1 <- edit(forest_plot_1_to_many)

надеюсь, что это работает :) спасибо

1 Ответ

0 голосов
/ 05 января 2019

Это, вероятно, происходит потому, что forest_plot_1_to_many использует неэкспортированную функцию forest_plot_names2. Поскольку forest_plot_1_to_many находится в пространстве имен TwoSampleMR, он может «видеть» другие функции в этом пространстве имен, даже если они не экспортируются. Когда вы копируете функцию в свою глобальную среду Если вы измените среду функции, она больше не сможет "видеть" эти неэкспортированные функции. Это верно , если вы используете fix или , если вы просто распечатываете функцию и копируете / вставляете / редактируете / оцениваете ее вручную.

Для быстрого решения проблемы вы можете использовать ::: для вызова неэкспортированных функций. Когда вы fix forest_plot_1_to_many заменяете все звонки на forest_plot_names2 на TwoSampleMR:::forest_plot_names2. Более сложные вещи возможны, например, fixInNamespace, но у меня нет большого опыта с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...