0

islands1<-islands #a named num (vector)

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

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

现在假设我编写了一个函数,因为我有一堆要转换为数据帧的命名向量。每个向量都有编号,例如 island1、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 如何以及何时评估参数以及如何索引对象。

4

2 回答 2

2

尝试as.character(quote(islands1))

?quote: "quote 只返回它的参数。参数不被评估,可以是任何 R 表达式。"

于 2018-07-19T22:37:51.737 回答
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
于 2018-07-19T22:54:28.390 回答