在
base R
split
数据的子集,即“cont”由“id”变为真
list
. 然后再绕一圈
列表
names
的
列表
在里面
Map
,检查
if
这个
unique
行多于一行,则调用
stop
lst1 <- split(dat[dat$cont,c("mp", "pos")], dat$id[dat$cont])
Map(function(x, y) if(nrow(unique(x)) > 1)
stop(sprintf("'%s' has a wrong value.", y), call. = FALSE),
lst1, names(lst1))
#Error: 'B' has a wrong value.
使用更新的示例
lst1 <- split(dat[dat$control, c("mpre", "post")], dat$study.name[dat$control])
Map(function(x, y) if(all(lengths(lapply(x, unique)) > 1))
stop(dQuote(sprintf("'%s' has a wrong value.", y), FALSE), call. = FALSE),
lst1, names(lst1))
#Error: "'Brown' has a wrong value."