覆盖函数定义的各个部分

时间:2014-09-27 16:33:38

标签: r

使用assignInNamespace,您可以覆盖包功能。这很好,但我必须只覆盖200个功能行中的一行。所以我必须复制&粘贴很多代码。 :(

有没有办法只覆盖函数的某些部分?只有函数内的变量或其他函数?

1 个答案:

答案 0 :(得分: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