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如何以及何时评估参数以及如何为对象建立索引。
答案 0 :(得分:2)
尝试as.character(quote(islands1))
?quote
:“ quote只是返回其参数。该参数不被求值,可以是任何R表达式。”
答案 1 :(得分:2)
我希望将数字列命名为“ islands1”,因为那是参数的名称...
按如下方式使用deparse
和substitute
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