[英]How to get the variable name in a function call?
對不起,我的英語很差,但我想不出一個可以簡明地描述我的問題的標題,這比標題所暗示的有點復雜。
這是我想要實現的目標:
在全局環境中,可以通過調用deparse(substitute(xyz))
來獲取變量的名稱,比如xyz
。 我需要在我的代碼中的幾個地方使用它,所以我決定使它成為一個函數: getVarName <- function(x){deparse(substitute(x))}
。
然后我寫了一些函數myfunc
,我需要在其中調用getVarName
:
myfunc <- function(x){cat(getVarName(x))}
現在問題是:當我調用myfunc(y)
時,它仍然打印出x
,而不是打印出y
。 我懷疑它與環境有關,其中substitute()
可以解決問題,但在那個方向上沒有運氣。
為了做到這一點,我該怎么辦?
PS如果有人可以通過更好地描述這個問題來編輯標題,那將是很好的,謝謝!
從我在測試代碼時看到的內容來看, deparse(substitute(x))
似乎只打印出調用堆棧中緊鄰其下方的變量的名稱。 在你的例子中:
getVarName <- function(x){ deparse(substitute(x)) }
myfunc <- function(x){ cat(getVarName(x)) }
myfunc(y)
對getVarName()
的調用是從myfunc()
處理一個名為x
的變量。 實際上,您傳遞的變量y
不再是調用堆棧的一部分。
解:
只需在要打印變量名稱的函數中直接使用deparse(substitute(x))
。 它很簡潔,你可以證明沒有輔助功能就像擁有輔助功能一樣容易。
它通常是一種功能性編程問題,您可以使用裝飾器:
decorator = function(f)
{
function(...)
{
print(as.list(match.call()[-1]))
f(...)
}
}
foo = function(x,y,z=2) paste0(x,y,z)
superFoo = decorator(foo)
結果:
> xx=34
> superFoo('bigwhale',xx)
[[1]]
[1] "bigwhale"
[[2]]
xx
[1] "bigwhale342"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.