gpt4 book ai didi

r - 删除 R 中的多列时出错

转载 作者:行者123 更新时间:2023-12-04 10:35:42 24 4
gpt4 key购买 nike

我是 R 新手,我正在尝试使用 for 循环简单地删除许多列

for (i in 15:ncol(DB)){
BD[,i]<- NULL
}

但我不断收到此错误:

 Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) : 
new columns would leave holes after existing columns

有人可以解释为什么会这样吗?谢谢

最佳答案

其他人已经展示了如何做您想做的事,我将重点介绍错误消息的含义以及您的方法不起作用的原因。

假设您的数据框有 20 列。通过循环的第一次迭代将删除第 15 列,并且在此过程中将移动第 15 列之后的所有列以填补空白,因此第 16 列现在位于第 15 列的位置,并且数据框现在有 19 列。

第二次迭代现在将删除第 16 列(最初是第 17 列)并将另一列移过来,这样现在就有 18 列。

第三次迭代将删除第 17 列(最初是第 19 列已移动两次)并将第 20 列向下移动到第 17 列,数据框现在有 17 列。

第 4 次迭代将尝试将 NULL 分配给第 18 列,该列不存在,但在现有列旁边,因此可能不会提示。

第 5 次迭代现在将尝试分配给第 19 列,但数据框中只剩下 17 列,这会留下一个间隙(没有第 18 列),因此会出现错误。

这可能不是您想要的结果,因为第 16 列和第 18 列仍在数据框中,只是位置不同。这是在循环中修改任何对象时需要小心的原因之一。对于简单的删除,其他答案显示了更好的方法。但是如果你想使用一个循环,因为你只是有条件地删除,那么它仍然是可能的,你只需要使用 ncol(DB):15 向后工作(从右到左,从高到低)。而不是 15:ncol(DB) .这从最后一列开始向下移动,这样任何移动的列都是已经测试和处理过的列。

关于r - 删除 R 中的多列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24764892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com