标题不是超级描述性的,因为问题比我能想到的合理标题更长。
我希望有一个函数可以从其他函数中获取对象名,这些函数可以在另一个函数中用作参数。这是一个准确的尝试:
grab <- function(x) {
as.character(substitute(x))
}
FUN <- function(foo, bar = grab(foo)) {
bar
}
FUN(mtcars)
这里我希望FUN
返回字符串“mtcars”,但它返回“foo”。如何制作一个抓取功能来执行此操作(我想这样做,因为我将使用它作为txt / csv等文件的默认设置。这是一个方便的设置。
以下是一些不成功的尝试(但我希望有一个通用的抓取功能):
FUN2 <- function(foo, bar = as.character(substitute(bar))) {
bar
}
FUN2(mtcars)
#==================
FUN3 <- function(foo, bar) {
if(missing(bar)) bar <- foo
as.character(substitute(bar))
}
FUN3(mtcars)
现实生活中的例子:
real_example <- function(obj, file = grab(obj)) {
write.csv(obj, file = sprintf("%s.csv", file))
}
答案 0 :(得分:6)
您可以尝试使用sys.call
访问父呼叫:
## "which" is the number of the argument of interest
grab <- function(which) {
## which + 1, because [1] == name of function/call
## and arguments are 2:n
as.character(sys.call(-1L)[which+1L])
}
FUN <- function(foo, bar = grab(1L)) {
bar
}
FUN(mtcars)
# "mtcars"
答案 1 :(得分:6)
这个怎么样?
grab <- function(x) as.character(x[["foo"]])
FUN <- function(foo, bar=grab(match.call())) { bar }
FUN(mtcars)
# [1] "mtcars"