如何解决多维数组vs.列表元组列表
|| 我正在编写一些代码来执行一些游戏理论模拟。 我的“世界”有几种状态(以我的情况为2),也有数名玩家(再次为2),每个玩家都有一个支出矩阵(2 x 2)。 我尝试在R中创建以下多维数组:U = array(2,2,2)
U[1][1] = cbind(c(0.7,0.3),c(0.3,0.7))
并且收到以下错误:
number of items to replace is not a multiple of replacement length
我可以继续使用列表,其中每个项目都是两个项目A和B的列表,其中A和B是2x2矩阵。但是,我认为在列表上执行操作会变得很烦人,并且矢量化将很困难。
是否有关于正确实现的建议或有关上述代码为何无效的解释?
更新:显然正确的语法是:
U[1,1,] = cbind(c(0.7,0.7))
我的问题仍然存在-多维向量或元组列表哪个更好?
谢谢,
罗恩
解决方法
该代码无法正常工作,您至少应该自己尝试一下:
array(2,2,2) ## results in unused argument error
我想你想要一个4D阵列
U <- array(0,dim = c(2,2))
然后使用R \的?Extract语法分配给2D部分
U[1,1,] <- cbind(c(0.7,0.3),c(0.3,0.7))
可以将代码ѭ6in理解为U,就好像它是一个没有\“ dim \”属性的矢量一样(只是矢量中的数字,没有维结构)。第一个7提取第一个元素,返回一个元素向量,第二个7依次从那个单个元素向量中冗余提取第一个元素。
在理解U[1,]
是什么方面:这是一个2D矩阵,是4D数组U
的子集,通过从第一个和第二个维度获取第一个切片,从第三个和第四个维度获取每个切片来指定。
您看到的错误来自以下事实:您试图将2D矩阵分配给U
的单个元素-但是只有一个插槽,并且第一个元素的结构和大小与您要尝试的矩阵不同暗恋它。
从结果中删除(默认情况下)从提取的子集中仅包含一个切片的单例维度(第一和第二维)。可以通过指定以下方法避免这种情况:
U[1,drop = FALSE]
它将提供一个4D数组,但其中一个具有两个“简并的”维度,即[1、2、2、2],其中前两个是多余的(但其含义实际上取决于您的目的)。这部分与将新值分配给原始数组的子集的问题无关,但可能有助于您的理解。
数组还是列表最适合您取决于您要执行的操作,因此我建议您再次提出问题,并集中精力解决这些需求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。