是否有一个 R 函数可以从数据框中选择 N 个随机列?

发布于 2025-01-16 22:00:01 字数 764 浏览 2 评论 0原文

是否有一个 R 函数可以从数据框中选择 N 个随机列?我正在尝试检查用于贝叶斯网络结构学习的 Sparsebn 包的时间复杂度

我已经尝试过了,但是该算法不仅选择 N 列,而且还选择 N 行。如何解决这个问题?

library(sparsebn)
library(igraph)
library(graph)

df <- read.csv("data/arth150.csv", header = TRUE, sep = ",", check.names = FALSE)

df <- as.data.frame(unclass(df), stringsAsFactors = TRUE)

experiment_range <- list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 106)

timelist <- list()

for (i in experiment_range) {
  rand_df <- df[sample(ncol(df), size=i), ]
  start_time <- Sys.time()
  dat <- sparsebnData(rand_df, type = 'c')
  dags <- estimate.dag(data = dat)
  end_time <- Sys.time()
  ctime <- end_time - start_time
  otime <- list(ctime)
  timelist <- append(timelist, otime)
}

Is there an R function to select N random columns from the dataframe? I'am trying to check the time complexity of Sparsebn package for structure learning of Bayesian Networks

I've tried this, but the algorithm selects not only N columns, but also N rows. How to fix that?

library(sparsebn)
library(igraph)
library(graph)

df <- read.csv("data/arth150.csv", header = TRUE, sep = ",", check.names = FALSE)

df <- as.data.frame(unclass(df), stringsAsFactors = TRUE)

experiment_range <- list(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 106)

timelist <- list()

for (i in experiment_range) {
  rand_df <- df[sample(ncol(df), size=i), ]
  start_time <- Sys.time()
  dat <- sparsebnData(rand_df, type = 'c')
  dags <- estimate.dag(data = dat)
  end_time <- Sys.time()
  ctime <- end_time - start_time
  otime <- list(ctime)
  timelist <- append(timelist, otime)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

命硬 2025-01-23 22:00:01

如果 df 是一个数据帧,您可以通过执行以下操作随机采样 i 列:

df[,sample(1:ncol(df),i)]

If df is a dataframe, you can sample i columns randomly by doing this:

df[,sample(1:ncol(df),i)]
终难遇 2025-01-23 22:00:01

或者使用 dplyr:

dplyr::select(df, sample(seq_len(ncol(df)), size = i))

在管道中:

df %>% dplyr::select(sample(seq_len(ncol(.)), size = i))

Or using dplyr:

dplyr::select(df, sample(seq_len(ncol(df)), size = i))

In a pipe:

df %>% dplyr::select(sample(seq_len(ncol(.)), size = i))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文