我试图根据多个数据帧中的因子值有条件地输出绘图。我的数据帧是“n310”和另外323个数据帧“mrns [[i]]”。
我在n310数据框中为变量创建了类别:
n310$ar.cat[n310$arousals_index_per_h_sleep <= 14.9 & n310$arousals_index_per_h_sleep != "NA"] <- "LOW"
n310$ar.cat[n310$arousals_index_per_h_sleep > 14.9 & n310$arousals_index_per_h_sleep < 29.4] <- "MED"
n310$ar.cat[n310$arousals_index_per_h_sleep >= 29.4] <- "HIGH"
我通过匹配相应的mrn变量,将n310的分类和连续变量添加到mrns [[i]]:
for (i in 1:323) {
mrns[[i]]$ar.value <- n310$arousals_index_per_h_sleep[match(mrns[[i]]$raw.mrn, n310$mrn)]
mrns[[i]]$ar.cat <- n310$ar.cat[match(mrns[[i]]$raw.mrn, n310$mrn)]
}
然后我试图仅绘制mrns [[i]] $ ar.cat的“LOW”类别:
for (i in 1:323) {
if (mrns[[i]]$ar.cat == "LOW") {
png(paste0(arIndLowSys, mrns[[i]]$raw.mrn, "_systolic_ar_index_low.png"), height=1600, width=1600, res=200, family="Times")
plot(mrns[[i]]$raw.Hour, mrns[[i]]$raw.Systolic, main="Systolic Blood Pressure per Hour of Day", xlab="Hour of Day", ylab="Systolic Blood Pressure", family="Times", bty="L", xlim=c(0, 24), xaxp=c(0, 24, 12))
mtext(mrns[[i]]$ar.value, side=4, line=0)
mtext(mrns[[i]]$ar.cat, side=4, line=-1)
dev.off()
}}
并出现以下错误:
Error in if (mrns[[i]]$ar.cat == "LOW") { :
missing value where TRUE/FALSE needed
mrns [[i]] $ ar.cat中存在“NA”或缺失值,因此在制作图时我不是如何忽略这些“NA”值。
有人有任何建议吗?
谢谢!
答案 0 :(得分:1)
在代码周围包裹if (!is.na(mrns[[i]]$ar.cat))
,以便只绘制不等于NA
的索引。
for (i in 1:323) {
if (!is.na(mrns[[i]]$ar.cat)) {
if (mrns[[i]]$ar.cat == "LOW") {
png(paste0(arIndLowSys, mrns[[i]]$raw.mrn, "_systolic_ar_index_low.png"), height=1600, width=1600, res=200, family="Times")
plot(mrns[[i]]$raw.Hour, mrns[[i]]$raw.Systolic, main="Systolic Blood Pressure per Hour of Day", xlab="Hour of Day", ylab="Systolic Blood Pressure", family="Times", bty="L", xlim=c(0, 24), xaxp=c(0, 24, 12))
mtext(mrns[[i]]$ar.value, side=4, line=0)
mtext(mrns[[i]]$ar.cat, side=4, line=-1)
dev.off()
}
}
}
答案 1 :(得分:0)
按照您编写问题的方式假设,您的数据框位于列表中......
您需要将逻辑语句用作索引:
ind = sapply(mrns, function(i){
which(i$ar.cat == "LOW")
}
for (i in ind) {
# Your code
}
未经测试,但你明白了......
作为比较,以下是lapply的外观:
lapply(ind, function(i){
# Your code
})