【问题标题】:List output convert to a matrix列表输出转换为矩阵
【发布时间】:2017-10-07 21:40:25
【问题描述】:

我正在为矩阵编写以下程序。

X

center_apply

应用(x, 2, function(y) y - mean(y))

}

centX

ID

g1

N

n

HL

ZETA

for (j in seq(1,N,n)) {

mm

v

设置

M

AD

部分 *)

SEC

ZET

ZETA[[j]]

如果 (j==1){

HL[j]<-ZETA[1]  

}否则 {

HL[[j]]<-ZETA[j]- HL[j-n]

}

}

HL[1]

HL[5]

这个运行 HL[1] 但其余的。我收到一个错误"non-numeric argument to binary operator"。 非常感谢您在这方面的帮助。

【问题讨论】:

  • 嗨,您能否尝试添加一个数据输入的小示例,以允许您的代码运行。更好的是,如果您可以描述您正在尝试做的事情(参考输入和输出)。谢谢,
  • 谢谢@user20650。我编辑了我的帖子。当你运行它时,你会看到错误。非常感谢您对此提供的帮助。
  • 呻吟:t(centX) 是什么。启动一个未定义变量的会话并测试您的代码。
  • 真的很抱歉。我发布了正确的。再次感谢你..
  • 菅直人,感谢您的更新。要正确隔离代码中的错误,您能否确保它运行。正如@42 提到的,您可以在新的 R 会话中运行它以确保它工作/重现您看到的错误。例如,当我运行您的代码时,我得到 Error: object 'ZETA' not found 因为它在循环之前没有被初始化。所以如果我继续这样做,我会得到一个与你得到的不同的错误。如果您可以确保您的代码和错误是可重现的,我们都将尝试纠正相同的问题。谢谢。

标签: r


【解决方案1】:

在我看来,当您应该使用“[[”来提取数值时,您好像在提取子列表:

 else {
       HL[[j]]<-ZETA[[j]]- HL[[j-n]]; cat(str(ZETA)); cat(str(HL))
       }

如果参数是一个列表,R 中的“[”运算符总是返回一个列表值。值得将?Extract 页面反复阅读至少十遍,仔细注意每一段。这是我现在得到的(虽然看起来有点奇怪):

> str(HL)
List of 17
 $ : num [1:3, 1:3] 0.0631 -0.3173 -0.5259 -0.3173 1.5962 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 5.9151 -0.0913 3.6557 -0.0913 -1.5683 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] -4.31 -1.76 -7.33 -1.76 3.72 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 4.61 2.47 7.42 2.47 -2 ...
 $ : NULL
 $ : NULL
 $ : NULL
 $ : num [1:3, 1:3] 0.00182 0.28352 -11.72707 0.28352 3.65242 ...
> HL[[5]]
           [,1]       [,2]      [,3]
[1,]  5.9151241 -0.0912828  3.655714
[2,] -0.0912828 -1.5683258 -2.859833
[3,]  3.6557136 -2.8598327 -2.747340

【讨论】:

  • 只是说明为什么它看起来很奇怪:将分配索引到列表中的 n-th 项会自动为“填补n之间的空白”所需的任何索引创建 NULL 条目以及列表的初始长度。
猜你喜欢
  • 2021-05-17
  • 2010-12-03
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多