次のコードを使用してエラーが発生したため、コンテナー名を文字に変換する方法:
tenv = new.env()
evalq({ }, tenv)
y = function(myEnv) {
print(as.character(myEnv))
}
y(tenv)
Error in as.character(myEnv) :
cannot coerce type 'environment' to vector of type 'character'
次のコードを使用してエラーが発生したため、コンテナー名を文字に変換する方法:
tenv = new.env()
evalq({ }, tenv)
y = function(myEnv) {
print(as.character(myEnv))
}
y(tenv)
Error in as.character(myEnv) :
cannot coerce type 'environment' to vector of type 'character'
引数に渡されたオブジェクトの名前を取得したいだけの場合myEnv
、1 つの一般的なイディオムはdeparse(substitute( ))
. 関数は次のように記述できます。
y <- function(myEnv) {
deparse(substitute(myEnv))
}
使用中に与える
> tenv = new.env()
> evalq({ }, tenv)
> y(tenv)
[1] "tenv"
print
[注:の結果を明示的に示していないことに注意してください。結果をdeparse(substitute( ))
返すだけで、出力は R 環境に任せます]
これを行う別の方法は、一致した関数呼び出しを取得しmatch.call()
、結果の言語オブジェクトから必要なビットを抽出することです。例えば:
yy <- function(myEnv) {
.call <- match.call()
.call[[2]]
}
使用中に与える
> yy(tenv)
tenv
> yy(myEnv = tenv)
tenv
環境にはそのようなプロパティがないため、「コンテナ」(環境) を文字列に変換することはできません。環境が格納され、引数として function に渡された変数の名前が必要な場合は、y
上記の @Gavin によって提案されたソリューションを使用します。
OTOH、環境の内容をダンプする場合は、次を使用します。
y = function(myEnv) {
print(as.list(myEnv))
}
ところで、なぜ実行するのか理解できないことを指摘しなければなりませんevalq({ }, tenv)
。それは環境を変えません。次のことを試してください(コマンドを実行した後):
> uenv <- new.env()
> identical(as.list(uenv),as.list(tenv))