【发布时间】:2021-03-17 10:07:49
【问题描述】:
我正在寻找在函数调用中对iris 数据集进行子集化的最佳方法。这是代码-
data(iris)
remove_rows <- function(x)
{
x = setDT(x)[Species == "virginica"]
}
remove_rows(iris)
> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: 5.1 3.5 1.4 0.2 setosa
2: 4.9 3.0 1.4 0.2 setosa
3: 4.7 3.2 1.3 0.2 setosa
4: 4.6 3.1 1.5 0.2 setosa
5: 5.0 3.6 1.4 0.2 setosa
---
146: 6.7 3.0 5.2 2.3 virginica
147: 6.3 2.5 5.0 1.9 virginica
148: 6.5 3.0 5.2 2.0 virginica
149: 6.2 3.4 5.4 2.3 virginica
150: 5.9 3.0 5.1 1.8 virginica
如您所见,运行remove_rows 函数后没有任何行被删除。这是可以理解的,因为库 data.table 没有通过引用删除行的功能。
我使用的解决方法是更新remove_rows 函数并从函数中返回新对象-
library(data.table)
remove_rows <- function(x)
{
x= setDT(x)[Species == "virginica"]
return(x)
}
iris = remove_rows(iris)
这已经解决了问题,但是由于在我的例子中这个 data.table 很大(iris 只是一个玩具示例),运行这个函数并复制 iris 数据集中的子集需要很长时间。
这种情况有解决办法吗?
【问题讨论】:
-
你觉得这个讨论很有帮助:github.com/Rdatatable/data.table/issues/635
标签: r data.table