rbind 更改列中的值

rbind changes values in column

因此,我试图从 randomForest 对象中提取所有树数据,并将其放入数据框中。我一次拉出一棵树,cbind 将它与那棵树的索引结合起来,然后尝试将它们一起 rbind。这是我的代码。应该很容易重现。

# Do some setup, and train a basic random forest model

library(randomForest)
data(iris)

model <- randomForest(Species ~ ., data=iris)

# Make a data frame containing all the tree data

output <- data.frame()

for (i in 1:model[['forest']][['ntree']]) {
  new_values <- getTree(model, i)
  new_values <- cbind(tree = rep(i, nrow(new_values)), new_values)

  output <- rbind(output, test_new, make.row.names = FALSE)

  # Added for debug purposes...
  new_values
  output
  break
}

所以,当我查看 new_values 时,在第一步之后,树的值为 1。但是当我查看数据框时 "output," 树的值为 500。如果我让这个循环 运行 在没有调试代码的情况下通过,在整个循环结束时,"tree" 等于整个数据集的 500。显然,我希望树是从 1 到 500 的索引。

很明显我做错了什么,或者 rbind 过程以某种方式改变了我数据中的值。这是怎么回事?

(我想我可以用 do.calllapply 重写,看看是否有任何改变,但我仍然想知道为什么这不能用于学习目的的机制.)

您刚刚在 rbind 中用 test_new 交换了 new_values。我改变了它并尝试了下面的代码并且可以获得包含所有树数据的数据框,根据树编号:

# Do some setup, and train a basic random forest model

library(randomForest)
data(iris)

model <- randomForest(Species ~ ., data=iris)

# Make a data frame containing all the tree data

output <- data.frame()

for (i in 1:model[['forest']][['ntree']]) {
  new_values <- getTree(model, i)
  new_values <- cbind(tree = rep(i, nrow(new_values)), new_values)

  output <- rbind(output, new_values, make.row.names = FALSE)

}