gpt4 book ai didi

r - 取消引用维度名称

转载 作者:行者123 更新时间:2023-12-04 10:52:43 24 4
gpt4 key购买 nike

以下函数创建一个以变量名称作为维度名称的表

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))

}}

一些虚拟数据
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

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

最佳答案

你做了一些你不打算做的事情,导致了这种行为。
v1v2不是函数参数(即 promise )。他们是 character变量,在函数的本地环境中。将它们传递给 substitute什么都不做(因为它们不是 promise ),而是传递给 deparse在值的每一侧添加引号字符。这是您的代码的问题。

第一的:

v1 <- deparse(substitute(var1)) 
v2 <- deparse(substitute(var2))

然后:
bu<-c(deparse(substitute(v1)), deparse(substitute(v2)))

将后一行更改为:
bu <- c(v1, v2)

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

请注意以下表达式中添加的引号字符。这是您的功能出了什么问题:
> deparse('abc')
[1] "\"abc\""

关于r - 取消引用维度名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com