【发布时间】:2017-11-22 12:24:12
【问题描述】:
我目前正在使用 Johnson 包来转换一些数据(例如,错误召回项目的百分比和类似的)。
(https://cran.r-project.org/web/packages/Johnson/Johnson.pdf)
NE.Johnson 函数适用于我的大多数数据,除了两个变量。 尝试运行该函数时,我收到以下错误:
>recall_Johnson <- RE.Johnson(RECALL)
RE.ADT(xsl[, i]) 中的错误:找不到对象“p”
我真的希望你们能帮帮我,因为我不知道为什么会出现错误!
我已经直观地搜索了数据,但我找不到任何真正使这两个问题变量成立的东西。下面是一个工作正常的变量(抑制错误的百分比)和另一个不工作的变量(召回错误的百分比)的排序数据的打印输出。
工作正常:抑制错误
> sort.x=sort(Inhibpercent)
> print(sort.x)
[1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[7] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[13] 0.8403361 0.8474576 1.2605042 1.6666667 1.6666667 1.6666667
[19] 1.6666667 1.6666667 1.6666667 1.6666667 1.6806723 1.6949153
[25] 1.6949153 1.6949153 1.7021277 1.7241379 1.7241379 1.7543860
[31] 2.0833333 2.1008403 2.1276596 2.5000000 2.5000000 2.5104603
[37] 2.5423729 2.5531915 2.9166667 2.9166667 2.9166667 2.9166667
[43] 2.9411765 2.9535865 3.0042918 3.3333333 3.3333333 3.3333333
[49] 3.3333333 3.3613445 3.3755274 3.3755274 3.3898305 3.3898305
[55] 3.4188034 3.4482759 3.7500000 3.7656904 3.7815126 3.7815126
[61] 3.8297872 4.1666667 4.1841004 4.2016807 4.2194093 4.5833333
[67] 4.6025105 4.6511628 4.6808511 5.0000000 5.0000000 5.0000000
[73] 5.0209205 5.0847458 5.0847458 5.0847458 5.0847458 5.1282051
[79] 5.4393305 5.5319149 5.8333333 6.6666667 6.6666667 6.7796610
[85] 6.7796610 6.7796610 6.7796610 6.8965517 6.8965517 7.3033708
[91] 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333
[97] 8.4388186 8.4745763 8.4745763 8.4745763 8.6206897 9.5833333
[103] 9.6638655 10.0000000 10.1694915 10.1694915 10.3448276 10.5042017
[109] 10.7142857 11.3924051 11.6666667 11.6666667 12.0833333 13.3333333
[115] 15.2542373 18.3333333 20.7547170 25.8536585
不起作用:召回错误
> sort.x=sort(incorrectrecallpercent)
> print(sort.x)
[1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[7] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[13] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[19] 0.0000000 0.0000000 0.0000000 0.0000000 0.4166667 0.4166667
[25] 0.4201681 0.4201681 0.4201681 0.4219409 0.4255319 0.4255319
[31] 0.4878049 0.8333333 0.8368201 0.8403361 0.8403361 0.8438819
[37] 1.2500000 1.2500000 1.2500000 1.2605042 1.2875536 1.6666667
[43] 1.6666667 1.6666667 1.6666667 1.6666667 1.6666667 1.6736402
[49] 1.6949153 1.6949153 1.6949153 2.1186441 2.1186441 2.1186441
[55] 2.5000000 2.5000000 2.5104603 2.5210084 2.5210084 2.9166667
[61] 2.9787234 3.3333333 3.3333333 3.3898305 3.3898305 3.7500000
[67] 3.7735849 3.7974684 4.1666667 4.1841004 4.6025105 5.0000000
[73] 5.0000000 5.0847458 5.0847458 5.1724138 5.3571429 5.4621849
[79] 5.5084746 5.5555556 6.6666667 6.6666667 6.7226891 6.7796610
[85] 6.7796610 6.8965517 7.0175439 8.3333333 8.3333333 8.3333333
[91] 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333 10.0000000
[97] 10.0000000 10.0000000 10.1694915 10.3448276 11.2359551 11.6666667
[103] 12.2807018 12.2881356 13.5593220 13.7931035 13.7931035 16.1016949
[109] 16.2790698 16.4556962 16.9491525 17.9487179 26.1603376 29.3103448
[115] 32.2033898 32.2033898 32.2033898 39.9159664
除了回忆有更多的零实例之外,我真的看不出任何实质性差异吗?但也许我忽略了什么?
我已尝试遵循此线程的指导:Apply a loop to a data frame
建议修改此代码(RE.Johnson.R 中的第 101-103 行):
if(xsb.valida[1,i]==0) xsb.adtest[1,i]<-(RE.ADT(xsb[,i])$p)
if(xsl.valida[1,i]==0) xsl.adtest[1,i]<-(RE.ADT(xsl[,i])$p)
if(xsu.valida[1,i]==0) xsu.adtest[1,i]<-(RE.ADT(xsu[,i])$p)
到:
if (xsb.valida[1, i] == 0 & any(xsb[, i]!=xsb[1, i])){
xsb.adtest[1, i] <- (RE.ADT(xsb[, i])$p)
}
else{ xsb.adtest[1, i] <- 0
}
if (xsl.valida[1, i] == 0 & any(xsl[, i]!=xsl[1, i])) {
xsl.adtest[1, i] <- (RE.ADT(xsl[, i])$p)
}
else{ xsl.adtest[1, i] <- 0
}
if (xsu.valida[1, i] == 0 & any(xsu[, i]!=xsu[1, i])) {
xsu.adtest[1, i] <- (RE.ADT(xsu[, i])$p)
}
else{xsu.adtest[1, i] <- 0
}
更改背后的原因是,当函数尝试转换为相等值的向量时,可能会出现相同的错误。我认为这不适用于我的数据,因为向量中的值不相等,但也许我误解了?如果函数将向量分成多个部分......也许这个问题可能是因为排序列表开头的零数量?我曾尝试更改代码,但不幸的是,它确实解决了问题。
我看到已插入以下代码来处理 NA/NaN 事件。它出现在脚本底部附近(NE.Johnson.R 中的第 106-108 行),就在我得到错误的位置下方(NE.Johnson.R 中的第 101 行)。哪个可能与我遇到的错误有关?
# insertion by Boda Martin to handle with NA/NaN occurrences
xsb.adtest[which(is.na(xsb.adtest))] <- 0
xsl.adtest[which(is.na(xsl.adtest))] <- 0
xsu.adtest[which(is.na(xsu.adtest))] <- 0
我们将不胜感激任何帮助、指导或在正确方向上的温和推动。
如果你想看代码,这里是下载包的链接:https://cran.r-project.org/web/packages/Johnson/index.html
非常感谢, 雷切尔
【问题讨论】:
标签: r package transformation