取消引用维度名称

may*_*bra 4 r

以下函数创建一个表,其中变量名称为维名称

col.table <- function(var1, var2, C=T,weights=rep(1,length(var1)), margins=TRUE,data,env=parent.frame()){ 
  require(weights); require(Hmisc)
  v1 <- deparse(substitute(var1)) 
  v2 <- deparse(substitute(var2)) 
  if(!missing(data)){
    var1 <- data[,deparse(substitute(var1))]
    var2 <- data[,deparse(substitute(var2))]
    weights <- data[,deparse(substitute(weights))]
  }


  if (C) {
    crosstab <-prop.table(xtabs(weights ~ var1 + var2,data), margin=2)

    t <- cbind(crosstab, Total=prop.table(xtabs(weights ~ var1,data=data)))
    t <- rbind(t,Total = colSums(t))
    bu<-c(deparse(substitute(v1)), deparse(substitute(v2)))

    names(dimnames(t)) <- bu
    return(round(100*t,2))

}}
Run Code Online (Sandbox Code Playgroud)

一些虚拟数据

d<-data.frame(
  vara =c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
  varb = c(1,1,2,2,3,3,1,1,2,2,3,3,1,1,2),
  varc= c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
  weight= c(.5,.5,.5,.5,.5,1,1,1,1,1,2,2,2,2,2))

a<-col.table(vara,varb,data=d,weights=weight)
a
Run Code Online (Sandbox Code Playgroud)

我想返回的对象(a)来显示变量名不带引号(只是varavarb替代"vara",并"varb"在这种情况下).有谁知道如何做到这一点?我想删除函数内的引号而不是它之外的引号.

Mat*_*erg 5

你做了一些你不想要的事情,导致了这种行为.

v1并且v2不是函数参数(即promises).它们是character函数本地环境中的变量.传递给他们substitute什么都不做(因为他们不是承诺),但传递给deparse价值的每一边添加引号字符.这是您的代码的问题.

第一:

v1 <- deparse(substitute(var1)) 
v2 <- deparse(substitute(var2)) 
Run Code Online (Sandbox Code Playgroud)

然后:

bu<-c(deparse(substitute(v1)), deparse(substitute(v2)))
Run Code Online (Sandbox Code Playgroud)

将后一行更改为:

bu <- c(v1, v2)
Run Code Online (Sandbox Code Playgroud)

这解决了问题的根源,而不是稍后通过删除引号字符来屏蔽它.

请注意以下表达式中添加的引号字符.这是你的功能出了什么问题:

> deparse('abc')
[1] "\"abc\""
Run Code Online (Sandbox Code Playgroud)