为什么.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

你应该避免在这样的循环中增长对象。我大体上同意,其他答案建议更好的方法,但鉴于这个问题,我想解释当前代码的错误。你应该避免在这样的循环中增长对象。我大体上同意,其他答案建议更好的方法,但考虑到这个问题,我想解释一下当前代码的错误。