我尝试连接2个数据帧:Eset2和Essential。它们共享一个包含基因名称的公共列,两个帧都有唯一的行。
所以我决定在Eset2中查找我需要的值(RMA,ANNOT)并将它们绑定到Essential中具有相应基因名称的行。
但有时我无法抬头,因为Essential中有独特的基因。因此,会出现错误:我在Eset2中搜索相应的行会变为数字(0)。
所以我决定使用tryCatch。 但是,它没有帮助。当搜索在Eset2中没有找到这样的基因时,脚本不会输入NA作为RMA和ANNOT,而是从先前成功找到的基因中输入值。
for (i in 1:nrow(essential)) {
temp <- tryCatch(
# eset2$GENENAMEand essential[,4] contain gene names
eset2[eset2$GENENAME == essential[i,4],]$RMA,
error = function(e) {
print("This is the 'error' part1")
return(NA)}
)
essential$rma[i] <- temp
temp <- tryCatch(
eset2[eset2$GENENAME == essential[i,4],]$ANNOT,
error = function(e) {
print("This is the 'error' part2")
return(NA)}
)
essential$long_name[i] <- temp
}
我用这个来解决这个问题:
for (i in 1:nrow(essential)) {
temp <- try(eset2[eset2$SYMBOL == essential[i,4],]$rma)
if (length(temp) != 0) {
essential$rma[i] <- temp
}
else {
essential$rma[i] <- NA
}
temp <- try(eset2[eset2$SYMBOL == essential[i,4],]$GENENAME)
if (length(temp) != 0) {
essential$long_name[i] <- temp
}
else {
essential$long_name[i] <- NA
}
}
我想知道我是否使用了tryCatch错误。 我试过这样做:
temp <- eset2[eset2$GENENAME == essential[i,4],]$ANNOT
但它没有帮助。 你能明白为什么我的tryCatch失败了吗?
答案 0 :(得分:0)
我认为永远不会评估错误块的原因是评估为numeric(0)
的数据帧子集不是错误。相反,您应该明确检查numeric(0)
并在遇到NA
时替换为for (i in 1:nrow(essential)) {
temp <- eset2[eset2$GENENAME == essential[i,4],]$RMA
essential$rma[i] <- ifelse(length(temp) == 0, NA, temp)
temp <- eset2[eset2$GENENAME == essential[i,4],]$ANNOT
essential$long_name[i] <- ifelse(length(temp) == 0, NA, temp)
}
:
for
顺便说一下,可能有一种方法可以向你使用的D:\Eon_Final_Build\EON_android\app\src\main\AndroidManifest.xml:96:13-72 Error:
Attribute activity#com.facebook.FacebookActivity@theme value=(@android:style/Theme.Translucent.NoTitleBar) from AndroidManifest.xml:96:13-72
is also present at [com.facebook.android:facebook-android-sdk:4.16.0] AndroidManifest.xml:32:13-63 value=(@style/com_facebook_activity_theme).
Suggestion: add 'tools:replace="android:theme"' to <activity> element at AndroidManifest.xml:92:9-96:75 to override.
See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.
:app:processDebugManifest FAILED
Error:Execution failed for task ':app:processDebugManifest'.
Manifest merger failed : Attribute activity#com.facebook.FacebookActivity@theme value=(@android:style/Theme.Translucent.NoTitleBar) from AndroidManifest.xml:96:13-72
is also present at [com.facebook.android:facebook-android-sdk:4.16.0] AndroidManifest.xml:32:13-63 value=(@style/com_facebook_activity_theme).
Suggestion: add 'tools:replace="android:theme"' to <activity> element at AndroidManifest.xml:92:9-96:75 to override.
Information:BUILD FAILED
循环进行矢量化,可能会将整个循环减少到几行R代码。但是这个答案有希望揭示为什么错误块永远不会被击中,以及你可以做什么作为替代。