首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多变量向量值函数的输出收集到数据中?

如何将多变量向量值函数的输出收集到数据中?
EN

Stack Overflow用户
提问于 2020-12-31 00:17:17
回答 3查看 57关注 0票数 2

我有一个函数f1,它接受一对实数(x, y)并返回实数的三倍。我想收集这个函数的所有输出,用于向量x中的所有a和向量b中的y。请你详细说明一下如何做好吗?

代码语言:javascript
复制
f1 <- function(x, y){
  return (c(x+y, x-y, x*y))
}

a <- seq(0, pi, 0.1)
b <- seq(0, 2 * pi, 0.1)

更新:--我的意思是对所有对$(x,y) \在a\倍b$中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-31 00:22:33

我们可以使用expand.grid扩展'a‘和'b’值之间的数据,然后用applyMARGIN = 1循环行并应用f1

代码语言:javascript
复制
out <- as.data.frame(t(apply(expand.grid(a, b), 1, function(x) f1(x[1], x[2]))))

或使用tidyverse

代码语言:javascript
复制
library(dplyr)
library(purrr)
library(tidyr)

out2 <- crossing(x = a, y = b) %>% 
       pmap_dfr(f2)

-output

代码语言:javascript
复制
head(out2)
# A tibble: 6 x 3
#    add subtract multiply
#  <dbl>    <dbl>    <dbl>
#1   0        0          0
#2   0.1     -0.1        0
#3   0.2     -0.2        0
#4   0.3     -0.3        0
#5   0.4     -0.4        0
#6   0.5     -0.5        0

其中f2

代码语言:javascript
复制
f2 <- function(x, y){
    return (tibble(add = x+y, subtract = x-y, multiply = x*y))
  }

最好是return a listtibble,这样就更容易了。

票数 2
EN

Stack Overflow用户

发布于 2020-12-31 01:14:49

这里有一个data.table选项

代码语言:javascript
复制
setDT(expand.grid(a, b))[, fval := do.call(Vectorize(f1, SIMPLIFY = FALSE), unname(.SD))][]

其中使用expand.grid + do.call + Vectorize,给出

代码语言:javascript
复制
      Var1 Var2              fval
   1:  0.0  0.0             0,0,0
   2:  0.1  0.0       0.1,0.1,0.0
   3:  0.2  0.0       0.2,0.2,0.0
   4:  0.3  0.0       0.3,0.3,0.0
   5:  0.4  0.0       0.4,0.4,0.0
  ---
2012:  2.7  6.2  8.90,-3.50,16.74
2013:  2.8  6.2  9.00,-3.40,17.36
2014:  2.9  6.2  9.10,-3.30,17.98
2015:  3.0  6.2     9.2,-3.2,18.6
2016:  3.1  6.2  9.30,-3.10,19.22

更紧凑的是使用CJ(a,b)而不是setDT(expand.grid(a, b)) (谢谢@akrun的建议)

票数 3
EN

Stack Overflow用户

发布于 2020-12-31 02:09:44

使用expand.grid创建所有可能的组合,并使用Mapf1应用于每一对。

代码语言:javascript
复制
val <- expand.grid(a, b)
result <- do.call(rbind, Map(f1, val$Var1, val$Var2))
head(result)

#     [,1] [,2] [,3]
#[1,]  0.0  0.0    0
#[2,]  0.1  0.1    0
#[3,]  0.2  0.2    0
#[4,]  0.3  0.3    0
#[5,]  0.4  0.4    0
#[6,]  0.5  0.5    0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65515169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档