以下函数创建一个表,其中变量名称为维名称
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)来显示变量名不带引号(只是vara和varb替代"vara",并"varb"在这种情况下).有谁知道如何做到这一点?我想删除函数内的引号而不是它之外的引号.
你做了一些你不想要的事情,导致了这种行为.
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)
| 归档时间: |
|
| 查看次数: |
7941 次 |
| 最近记录: |