簡體   English   中英

如何在函數調用中獲取變量名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM