提取R中data.frame的名称作为字符,而不创建所有data.frames的列表,然后从该列表中调用

时间:2018-08-02 13:03:40

标签: r

我有一个数据帧df。 我将其分配给对象x。

x <- df

我想创建一个对象y,使y接受字符“ df”,即仅使用数据框的名称,双引号中的df而不使用数据框本身。但是我想使用创建的对象x作为输入将“ df”分配给y。

调用y时,输出应为:

> y
[1] "df"

我只需要提取数据帧df的名称,并将其分配给对象y。

我了解实现此目的的一种方法是通过创建环境中所有数据帧的列表,然后从该列表中调用'df'。

我想知道是否还有其他方法可以做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:0)

我们需要两个假设:

  1. 两个符号都在同一环境中

  2. 您尚未修改其中任何一个,因此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?