r - 有没有办法在 R 中创建 "fragile"属性?

标签 r class attributes

有什么方法可以在一个对象上设置一个属性,当它被另一个函数处理时被删除?例如,我可能会写:

weightedMeanZr <- function(r,n) {
   require(psych)
   Zr <- fisherz(r) 
   ZrBar <- sum(Zr*(n-3))/(sum(n-3))
   attr(ZrBar,"names") <- "ZrBar"
   return(ZrBar)
}

计算一组相关性的加权费舍尔变换 Z 平均值。但是,如果我将它转换回 r,例如

require(psych)
bdata <- structure(list(Sample = 1:6, n = c(4L, 13L, 9L, 5L, 11L, 14L), 
    r = c(0.93, 0.57, 0.46, -0.09, 0.12, 0.32)), .Names = c("Sample", 
"n", "r"), class = "data.frame", row.names = c(NA, -6L))

fisherz2r(with(bdata,weightedMeanZr(r,n)))

fisherz2r 的输出值保留了 weightedMeanZr 结果的名称属性。有什么方法可以使该属性变得脆弱,以便由 fisherz2r 等函数处理时删除 names 属性?

编辑 像这样完成的事情:

weightedMeanZr <- function(r,n) {
   require(psych)
   Zr <- fisherz(r) 
   ZrBar <- sum(Zr*(n-3))/(sum(n-3))
   class(ZrBar) <- "ZrBar"
   return(ZrBar)
}
"+.ZrBar" <- function(e1,e2) {
    return(unclass(e1)+unclass(e2))
}
"-.ZrBar" <- function(e1,e2) {
    return(unclass(e1)-unclass(e2))
}
"*.ZrBar" <- function(e1,e2) {
    return(unclass(e1)*unclass(e2))
}
"/.ZrBar" <- function(e1,e2) {
    return(unclass(e1)/unclass(e2))
}
weightedMeanZr(bdata$r,bdata$n)
weightedMeanZr(bdata$r,bdata$n)+1
weightedMeanZr(bdata$r,bdata$n)-1
weightedMeanZr(bdata$r,bdata$n)*2
weightedMeanZr(bdata$r,bdata$n)/2
fisherz2r(weightedMeanZr(bdata$r,bdata$n))

...但这仅适用于 fisherz2r 调用那些特定方法...是否有更通用的方法?

最佳答案

您可以使用unname 来删除名称

 fisherz2r(with(bdata,unname(weightedMeanZr(r,n))))
 # or
 unname(fisherz2(with(bdata,weightedMeanZr(r,n))))

as.vector,在本例中将去除名称

关于r - 有没有办法在 R 中创建 "fragile"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420617/

相关文章:

r - U_REGEX_INVALID_CAPTURE_GROUP_NAME 仅在 Windows 上尝试转义正则表达式字符时发生错误

r - geom_hline 的颜色在图例中不正确 [ggplot2]

R过滤出现多次但不包含特定字符串的数据

ruby-on-rails - active_record 序列化属性默认为空数组

c# - 扩展枚举,矫枉过正?

r - 按 3 个值合并(两个指定,一个在一个范围内)

jquery - jquery中通过构造函数设置类属性

c++ - 需要使用 Book* head 变量重载运算符但不起作用

class - 在 Fortran 中将模块分解为多个文件

laravel - Mewebstudio Purifier 添加自定义属性?