从 Tibble 中的第 1 行减去第 2 行
Subtracting Row 2 from Row 1 in a Tibble
我在 R 中有一个 tibble 对象,如下所示:
对于每一列,我想从第 2 行中减去第 1 行。我目前的做法如下:
mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids]
令人困惑的是,要在 2x9660 tibble 上执行此语句,代码需要 8-15 秒,这由 Sys.time() 计算确定。如果您能帮助我们更快地执行此操作并理解为什么此命令需要这么长时间,我们将不胜感激。
通过 unlist
ing,我们可以将其转换为 vector
并使其更有效率
unlist(each.group.mean[1,2:num.groups], use.names = FALSE)-
unlist(each.group.mean[2,2:num.centroids], use.names = FALSE)
原因是 data.frame
或 tibble
等具有许多 class 属性,这使得执行子集和计算的速度变慢。通过转换为 vector
所有这些 classes 都被剥离了。使用可重现的例子
数据
set.seed(24)
df1 <- as.tibble(as.data.frame(matrix(sample(1:10, 9660*10,
replace = TRUE), ncol = 9660)))
基准
system.time(df1[1,] - df1[2,])
# user system elapsed
# 0.78 0.00 0.78
system.time(unlist(df1[1,], use.names = FALSE) - unlist(df1[2,], use.names = FALSE))
# user system elapsed
# 0.03 0.00 0.03
我在 R 中有一个 tibble 对象,如下所示:
对于每一列,我想从第 2 行中减去第 1 行。我目前的做法如下:
mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids]
令人困惑的是,要在 2x9660 tibble 上执行此语句,代码需要 8-15 秒,这由 Sys.time() 计算确定。如果您能帮助我们更快地执行此操作并理解为什么此命令需要这么长时间,我们将不胜感激。
通过 unlist
ing,我们可以将其转换为 vector
并使其更有效率
unlist(each.group.mean[1,2:num.groups], use.names = FALSE)-
unlist(each.group.mean[2,2:num.centroids], use.names = FALSE)
原因是 data.frame
或 tibble
等具有许多 class 属性,这使得执行子集和计算的速度变慢。通过转换为 vector
所有这些 classes 都被剥离了。使用可重现的例子
数据
set.seed(24)
df1 <- as.tibble(as.data.frame(matrix(sample(1:10, 9660*10,
replace = TRUE), ncol = 9660)))
基准
system.time(df1[1,] - df1[2,])
# user system elapsed
# 0.78 0.00 0.78
system.time(unlist(df1[1,], use.names = FALSE) - unlist(df1[2,], use.names = FALSE))
# user system elapsed
# 0.03 0.00 0.03