r - 构建nxn矩阵,其中每一列代表一个函数,每一行代表一个参数。(缩短代码)
问题描述
我创建了一个 10x10 矩阵,其中每一列代表函数 FUN1 到 FUN10,每一行代表参数 P1 到 P10。
a <- NULL
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P1,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P2,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P3,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P4,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P5,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P6,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P7,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P8,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P9,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN1(data,P10,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN2(data,P1,x))))
...
a <- rbind(a,(sapply(c(1:n), function(x) FUN2(data,P10,x))))
a <- rbind(a,(sapply(c(1:n), function(x) FUN3(data,P1,x))))
...
a <- rbind(a,(sapply(c(1:n), function(x) FUN3(data,P10,x))))
...
a <- rbind(a,(sapply(c(1:n), function(x) FUN10(data,P1,x))))
...
a <- rbind(a,(sapply(c(1:n), function(x) FUN10(data,P10,x))))
a <- as.vector(a)
MM <- matrix(a,nrow=10,byrow=FALSE)
我怎样才能使这段代码更短?
解决方案
我们可以使用“n”、 s 和“P”对象名称expand.grid
的序列的所有组合创建一个 data.frameFUN
n <- 10
d1 <- expand.grid(n = seq_len(n), f = paste0("FUN", 1:10),
p = paste0("P", 1:10), stringsAsFactors = FALSE)
然后循环rows
,将函数应用于“数据”,并将unlist
输出list
的vector
a <- do.call(rbind, lapply(seq_len(nrow(d1)), function(i)
match.fun(d1$f[i])(data, get(d1$p[i]), d1$n[i])))
MM <- matrix(a, nrow = 10, byrow = FALSE)
或者这可以用tidyverse
library(dplyr)
library(tidyr)
library(stringr)
crossing(n = seq_len(n), f = paste0("FUN", 1:10),
p = str_c("P", 1:10)) %>%
pmap(~ match.fun(..2)(data, get(..3), ..1)) %>%
unlist %>%
matrix(., nrow = 10, byrow = FALSE)
推荐阅读
- html - 如何添加自定义属性和属性
路由器链接? - .net - 如何使用 dotnet CLI(命令行)将项目(.csproj)添加到解决方案文件夹下的解决方案(.sln)?
- java - 性能:内部接口与单独的接口类
- python - 使用 pip 安装 TensorLy 的错误代码
- javascript - 加载和重用图像源 (blob)
- ruby-on-rails - 文件上传后 CarrierWave 不返回 url
- c - SOCK_SEQPACKET Unix Socket 上的空包
- python - 在没有外部功能的情况下旋转图像
- web-scraping - 是否可以抓取网站的脚本并使用 Puppeteer 跟踪它们加载的连续脚本
- html - CSS !important 和内联样式被覆盖