R函数参考参数而不评估它

时间:2018-07-19 22:30:31

标签: r function indexing text2vec

islands1<-islands #a named num (vector)

data.frame(island_col=names(islands1), number_col=islands1,row.names=NULL)

这将创建一个由两列组成的数据框,第一列包含命名向量的名称,称为“ island_col”,第二列包含数字,并命名为“ number_col”。没问题。

现在假设我编写了一个函数,因为我有一堆要转换为数据帧的命名向量。每个向量都有编号,例如islands1,islands2等。

dfunc<-function(x) data.frame(island_col=names(x), as.name(x)<-(x),row.names=NULL) 这是一个使用data.frame将命名向量转换为数据帧

的函数

firstdf<-dfunc(islands) 我在名为“ islands1”的矢量上使用该函数。我希望将数字列命名为“ islands1”,因为那是参数的名称,但是R不理解这一点,而是尝试评估参数本身。我已经尝试过使用paste0函数和as.character进行变体,但是无法使其正常工作。

此外,是的,我知道导致所有这些命名向量的所有操作都应该使用lapply完成,因此我现在有一个要使用的列表。我花了很多时间去做这条路线(请参阅我的另一个问题),但最终无法使它正常工作,并且有最后期限要考虑。更广泛地说,我试图更好地理解R如何以及何时评估参数以及如何为对象建立索引。

2 个答案:

答案 0 :(得分:2)

尝试as.character(quote(islands1))

?quote:“ quote只是返回其参数。该参数不被求值,可以是任何R表达式。”

答案 1 :(得分:2)

  

我希望将数字列命名为“ islands1”,因为那是参数的名称...

按如下方式使用deparsesubstitute

islands1 <- c(a = 1, b = 2, c = 3)
islands2 <- c(d = 3, e = 2, g = 1)

func <- function(x){
  out <- data.frame(island_col = names(x), xSym = x)
  names(out)[2] <- deparse(substitute(x))
  out
}

func(islands1)
#R   island_col islands1
#R a          a        1
#R b          b        2
#R c          c        3
func(islands2)
#R   island_col islands2
#R d          d        3
#R e          e        2
#R g          g        1