我有一个数据帧df。 我将其分配给对象x。
x <- df
我想创建一个对象y,使y接受字符“ df”,即仅使用数据框的名称,双引号中的df而不使用数据框本身。但是我想使用创建的对象x作为输入将“ df”分配给y。
调用y时,输出应为:
> y
[1] "df"
我只需要提取数据帧df的名称,并将其分配给对象y。
我了解实现此目的的一种方法是通过创建环境中所有数据帧的列表,然后从该列表中调用'df'。
我想知道是否还有其他方法可以做到这一点。
谢谢。
答案 0 :(得分:0)
我们需要两个假设:
两个符号都在同一环境中
您尚未修改其中任何一个,因此R尚未进行深拷贝。
然后,您可以在内存中查找指向相同地址的符号。
df <- data.frame(a = 1)
x <- df
library(pryr)
address(x)
#[1] "0x12d905c0"
adr <- vapply(ls(.GlobalEnv), function(x) {
a <- as.symbol(x)
setNames(eval(bquote(address(.(a))),.GlobalEnv), x)
}, FUN.VALUE = character(1))
# df x
#"0x12d905c0" "0x12d905c0"
names(adr[adr == address(x)])
[1] "df" "x"
但是,如果将df
作为函数参数传递给foo(x = df)
,并且在函数内部需要名称“ df”,请参见以下问题:In R, how to get an object's name after it is sent to a function?