【问题标题】:Conditional function in R which returns a matrixR中的条件函数,它返回一个矩阵
【发布时间】:2020-06-25 13:35:04
【问题描述】:

如果这是一个愚蠢的问题,我很抱歉,但我对此有点陌生。 我想写一个 for 循环,其中输入是一个时间序列。根据时间条件,我想选择 mat1、mat2 或 mat3 来替换“mat”参数并将其乘以 2。

输出

对于每个时间点,我需要有一个输出。

time=seq(0,10, by=1)
mat1 <- matrix(data = rexp(9, rate = 10), nrow = 3, ncol = 3)
mat2 <- matrix(data = rexp(9, rate = 10), nrow = 3, ncol = 3)
mat3 <- matrix(data = rexp(9, rate = 10), nrow = 3, ncol = 3)

我想当time &lt;= 3“mat1”被选中 当time&gt;3 & time&lt;=6 "mat2" 被选中 而当time &gt;6"mat3"被选中然后乘以2。

我知道这一切有点粗略,但我们将不胜感激。

【问题讨论】:

  • mylist &lt;- list(mat1, mat2, mat3); lapply(mylist[findInterval(time, c(-Inf, 3, 6, Inf))], "*", 2)
  • 亲爱的罗兰。感谢您的时间。我非常感谢。如果我想在每个时间点提取相应的垫子,特别是第二行垫子 [,2] 并将其相乘,我该怎么做?你有想法吗?现在它是一个列表格式

标签: r function for-loop


【解决方案1】:

顺便说一句,如果你想要一个连续整数的列表,你可以简单地使用time &lt;- 0:10

这是一种方法

lapply(as.character(cut(time,c(-1,3.1,6.1,10),labels=c('mat1','mat2','mat3'))), function(x) get(x)*2)


[[1]]
          [,1]      [,2]        [,3]
[1,] 0.4013379 1.2690301 0.142831401
[2,] 0.1536697 0.1132762 0.040964909
[3,] 0.1412248 0.2209273 0.007446217

[[2]]
          [,1]      [,2]        [,3]
[1,] 0.4013379 1.2690301 0.142831401
[2,] 0.1536697 0.1132762 0.040964909
[3,] 0.1412248 0.2209273 0.007446217

                 ...

[[10]]
           [,1]       [,2]       [,3]
[1,] 0.16712782 0.06451693 0.06554605
[2,] 0.03614116 0.18526124 0.46443236
[3,] 0.53055007 0.01203971 0.16585931

[[11]]
           [,1]       [,2]       [,3]
[1,] 0.16712782 0.06451693 0.06554605
[2,] 0.03614116 0.18526124 0.46443236
[3,] 0.53055007 0.01203971 0.16585931

【讨论】:

  • 亲爱的丹尼尔。感谢您的时间。我非常感谢。如果我想在每个时间点提取相应的垫子,特别是第二行垫子 [,2] 并将其相乘,我该怎么做?你有想法吗?现在它是一个列表格式
  • 您可以将function(x) get(x)*2 更改为您想要的任何内容。 get(x) 是每个“垫子”,所以如果你只想要第二行,你可以改用function(x) get(x)[2,]
猜你喜欢
  • 2021-05-11
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多