【问题标题】:R:subsetting a list using NULLR:使用 NULL 对列表进行子集化
【发布时间】:2013-10-16 20:23:51
【问题描述】:

我在 R 的 MASS 库中有一个数据集“波士顿”。我想排除变量“chas”、“dis”、“rad”、“black”、“lstat”。但是代码

data[c("chas","dis","rad","black","lstat")]<-NULL

不起作用。谁能告诉我为什么?

【问题讨论】:

  • 缺少逗号:data[,c("chas","dis","rad","black","lstat")]&lt;-NULL
  • 不。报同样的错误:Error in [(*tmp*, , c("chas", "dis", "rad", "black", : replacement has 0 items, need 2530

标签: r list subset


【解决方案1】:
data[,c("chas","dis","rad","black","lstat")]<- list(NULL)

会起作用。我不完全确定为什么。我的猜测是它与 [&lt;-.data.frame 的工作方式有关 - 请注意 data[,"chas",drop=F] &lt;- NULL 将不起作用,但 data[,"chas"] &lt;- NULL 会。

【讨论】:

  • list(NULL) 与 NULL 不同,它在结构(如果不是长度)中匹配被删除的项目。而 RingTFingM 我们看到“要将条目设置为 NULL,您需要 x[i]
【解决方案2】:

你可以使用

Boston[,-which(names(Boston)%in%c("chas","dis","rad","black","lstat"))]

【讨论】:

  • 是的,但是如果您添加适当的逗号,OP 方法会完美运行。
  • @juba 我不相信它会
  • @SeñorO 是的,你说得对,我只尝试删除一列,但有几列你必须使用list(NULL)
  • -which 是邪恶的。 setdiff 对于这些类型的操作要安全得多。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 2018-06-16
  • 2013-07-21
  • 2021-04-30
  • 1970-01-01
  • 2013-05-13
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多