【问题标题】:Pass tables through for-loop r通过 for 循环 r 传递表格
【发布时间】:2019-12-21 03:49:29
【问题描述】:

假设我有 n 个表:table_1、table_2、...、table_n。 我想创建如下 n 个矩阵,但我不知道如何使用 for-loop 或 lapply 函数来做同样的事情:

matrice_WS_1 = cbind(tab_1$WS) %*% rbind(tab_1$WS)
matrice_WS_2 = cbind(tab_2$WS) %*% rbind(tab_2$WS)
matrice_WS_3 = cbind(tab_3$WS) %*% rbind(tab_3$WS)
.
.
.
matrice_WS_n = cbind(tab_n$WS) %*% rbind(tab_n$WS)

【问题讨论】:

  • 您想通过在单个 WS 列上调用 cbindrbind 来完成什么?
  • 我尝试通过将列乘以行来创建矩阵。

标签: r for-loop datatables lapply


【解决方案1】:

将表放在一个列表中,然后迭代:

tbl.list <- list(table_1, table_2, table_3, table_n)

mat.list <- setNames(
  vector(mode = "list", length = length(tbl.list)), 
  nm = paste0("matrix_WS_",1:length(tbl.list))
  )

for (i in 1:length(tbl.list)) {
  dat = tbl.list[[i]]["WS"] #retain two dimensions
  mat = as.matrix(dat) #convert to matrix
  out = mat %*% t(mat) #transform data as desired
  mat.list[[i]] <- out
}

【讨论】:

  • 为什么....assign 确实减少了编写另一行在环境中创建不需要的对象的需要
  • 如果这是预期目的,那么我认为更新后的答案会更好
  • 有趣的建议...这在什么方面会有所改进?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多