为什么.call rbind只输出一行?
我也有类似的情况:为什么.call rbind只输出一行?,r,R,我也有类似的情况: set.seed(2014) df<-data.frame( group=rbinom(100,1,0.6), y1=rbinom(100,1,0.3), y2=rbinom(100,1,0.8)) for (y in c("y1","y1")){ test<-summary(table(df[,"group"],df[,y])) output<-do.call(rbind,list(cbind(test$statistic,test$p.value)))
set.seed(2014)
df<-data.frame(
group=rbinom(100,1,0.6),
y1=rbinom(100,1,0.3),
y2=rbinom(100,1,0.8))
for (y in c("y1","y1")){
test<-summary(table(df[,"group"],df[,y]))
output<-do.call(rbind,list(cbind(test$statistic,test$p.value)))
}
output
[,1] [,2]
[1,] 1.066 0.3019
在循环的每次迭代中(您已经使用y1两次),输出都会被一个新值覆盖。大概你的目标是这样的:
set.seed(2014)
df<-data.frame(
group=rbinom(100,1,0.6),
y1=rbinom(100,1,0.3),
y2=rbinom(100,1,0.8))
output <- NULL
for (y in c("y1","y2")){
test<-summary(table(df[,"group"],df[,y]))
output<-rbind(output,cbind(test$statistic,test$p.value))
}
output
set.seed(2014)
df在循环的每个迭代中(您已经使用y1两次),输出被一个新值覆盖。大概你的目标是这样的:
set.seed(2014)
df<-data.frame(
group=rbinom(100,1,0.6),
y1=rbinom(100,1,0.3),
y2=rbinom(100,1,0.8))
output <- NULL
for (y in c("y1","y2")){
test<-summary(table(df[,"group"],df[,y]))
output<-rbind(output,cbind(test$statistic,test$p.value))
}
output
set.seed(2014)
df基本上要做两次:
y <- "y1"
test<-summary(table(df[,"group"],df[,y]))
myList <- list(cbind(test$statistic,test$p.value))
#[[1]]
# [,1] [,2]
#[1,] 1.065739 0.30191
基本上你要做两次:
y <- "y1"
test<-summary(table(df[,"group"],df[,y]))
myList <- list(cbind(test$statistic,test$p.value))
#[[1]]
# [,1] [,2]
#[1,] 1.065739 0.30191
2个问题:在y1上循环两次,并且没有将新结果附加到旧结果。我想您应该使用lappy
和rbind
循环该列表:
do.call(rbind,lapply(c("y1","y2"),
function (y) summary(table(df[,"group"],df[,y]))))[,c("statistic","p.value")]
statistic p.value
[1,] 1.065739 0.30191
[2,] 0.000106695 0.9917585
2个问题:在y1上循环两次,并且没有将新结果附加到旧结果。我想您应该使用lappy
和rbind
循环该列表:
do.call(rbind,lapply(c("y1","y2"),
function (y) summary(table(df[,"group"],df[,y]))))[,c("statistic","p.value")]
statistic p.value
[1,] 1.065739 0.30191
[2,] 0.000106695 0.9917585
你应该避免在这样的循环中增长对象。我大体上同意,其他答案建议更好的方法,但鉴于这个问题,我想解释当前代码的错误。你应该避免在这样的循环中增长对象。我大体上同意,其他答案建议更好的方法,但考虑到这个问题,我想解释一下当前代码的错误。