使用assignInNamespace
,您可以覆盖包功能。这很好,但我必须只覆盖200个功能行中的一行。所以我必须复制&粘贴很多代码。 :(
有没有办法只覆盖函数的某些部分?只有函数内的变量或其他函数?
答案 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