2014-09-27 3 views
2

С помощью assignInNamespace вы можете переопределить функции пакета. Это работает отлично, но я должен переопределить только одной линии из 200 функциональных линий. Поэтому мне нужно скопировать код &. :(Переопределение частей определения функции

Есть ли способ, чтобы переопределить только части функции? Только переменную или другую функцию внутри функции?

ответ

4

Да. Вы можете использовать body<-. Вот простой пример, который изменяет последнюю строку setNames

setNames       ## original function 
# function (object = nm, nm) 
# { 
#  names(object) <- nm 
#  object 
# } 
# <bytecode: 0x45367a8> 
# <environment: namespace:stats> 
as.list(body(setNames))   ## look at the function body as a list 
# [[1]] 
# `{` 
# 
# [[2]] 
# names(object) <- nm 
# 
# [[3]] 
# object 
# 
body(setNames)[[3]] <- quote(nm) ## replace the last line with 'nm' 
setNames 
# function (object = nm, nm) 
# { 
#  names(object) <- nm 
#  nm 
# } 
#<environment: namespace:stats> 

Обратите внимание, что вы можете использовать grep, чтобы найти, где определенная переменная находится в теле функции

grep("object", body(setNames)) 
# [1] 2 3 
+0

Thanky у ou очень много. Поэтому мне нужно только выяснить, как получить 'body()' от невидимой функции пакета – ckluss

+2

Вы можете просмотреть функцию с помощью функции 'package ::: function' –

+0

, отлично работает, спасибо! – ckluss

Смежные вопросы