全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5869 4
2021-07-03
我目前生成了下面这样一张表。
R1.jpg
接下来要对这张表的不同的行里的数据进行一些运算,并把运算的结果赋值到其他的行里。
手工写代码计算是没有问题的,如下面两张图:
R2.jpg
R2b.jpg
可是,当我想把上面这两步计算写在function里面,让R自动计算的时候,就出现了错误。“Error in Ret.Table[3,] 量度数目不对”。
如图所示
R3.jpg
我尝试删除代码中带Ret.Table[3,]的内容,即上图中的绿色方框中的句子。删除后,function可以正确运行,可见故障确实实在Ret.Table[3,]相关的句子。


我尝试了在function里改写相关的句子,尝试了很多方式如下:

Ret.Table[3,] <- as.matrix(Ret.Table[2,]) *as.matrix(Ret.Table[7,])

or

Ret.Table[3,] <- as.vector(Ret.Table[2,]) *as.vector(Ret.Table[7,])

or

Ret.Table[3,] <- as.numeric(Ret.Table[2,]) * as.numeric( Ret.Table[7,])

or

Tmp <-Ret.Table[2,] * Ret.Table[7,]

Ret.Table[3,] <- Tmp

但是都没有用。报错还是存在。

求助各位大神,有没有遇到过类似的情况,如何解决。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2021-7-4 21:07:19
问题已解决。

用browser()逐句检查之后发现,原来问题原因不是出在两个绿框里的语句,而是两个绿框之间的语句。
Ret.Table[5,] <- Ret.Table[4,]-Riskfree 这句里。
Riskfree 是一行12个数据。我以为它是vector或者是matrix,但其实它是带列名的data.frame。
上面这句话并没有实现我希望的把Riskfree的值赋值到Ret.Table的第5行,反而是把Ret.Table这个matrix变成了一个奇怪的list,
以至于后一句 Ret.Table[6,] <- cumprod(Ret.Table[3,]) 无法计算
导致系统最终报错 “Error in Ret.Table[3,]”

最终解决方法:
把Ret.Table[5,] <- Ret.Table[4,]-Riskfree 这句话改为
Ret.Table[5,] <- Ret.Table[4,] - as.matrix(Riskfree)
或者
Ret.Table[5,] <- Ret.Table[4,] - as.numeric(Riskfree)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2021-7-8 07:11:39
挺好的;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-6 09:29:43
求大神指导,代码报错
Error in res_pop[res_pop$population == pop, ] : 量度数目不对
此外: Warning message:
Unknown or uninitialised column: `trait`.
[1] "There is not information for population 1000GENOMES:phase_3:EUR"
Error in snp_reverse_base(queried_effect_allele) :
  不是所有的x %in% c("A", "T", "C", "G")都是TRUE
如何解决?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-6 09:35:30
从您的描述看,问题似乎出在试图直接对矩阵的某一行进行计算并赋值回原矩阵。在 R 中,如果想要更新矩阵中的某个元素或行,通常的做法需要先将该行数据存储为向量,进行运算后,再将结果赋值回去。

在您给出的例子中,“Ret.Table[3,]”似乎是要用来存放计算后的结果。错误信息“Error in Ret.Table[3,] 量度数目不对”提示我们可能是在试图给矩阵的某一行赋一个元素数量不匹配的对象。例如,如果您对两行进行了相乘操作(假设这两行都是向量),得到的结果应该也是一个相同长度的向量,可以正确地被赋值回原矩阵的对应位置。

为了解决这个问题,您可以尝试以下步骤:

1. 确保参与运算的所有向量或数组具有相同的维度。
2. 在进行计算前,将需要更新的行(如“Ret.Table[3,]”)读取到一个单独的对象中。
3. 使用这个新对象进行计算,确保结果是一个与原矩阵的该行相同长度的向量。
4. 将计算结果赋值回原始矩阵。

以下是一个示例代码,展示了如何正确地执行这些步骤:

```r
# 假设 Ret.Table 是一个已经初始化为适当大小的矩阵
# 首先从矩阵中取出第3行数据
row_data <- Ret.Table[3,]

# 执行计算(这里使用的是两行相乘作为示例,您需要替换为实际的操作)
# 假设第一行为Ret.Table[1,]和第二行为Ret.Table[2,]
result <- Ret.Table[1,] * Ret.Table[2,]

# 将结果赋值回第三行
Ret.Table[3,] <- result

# 确保 `result` 的长度与矩阵的列数相同,否则将抛出错误。
```

请检查您的代码中的计算部分是否确保了数据维度的一致性,并按上述步骤尝试修改。如果问题仍然存在,请提供更多的代码细节以便于进一步分析和解决。

如果您需要在函数中动态地根据输入调整这些操作(例如,基于不同的行执行不同的运算),则可能需要使用一些控制结构来确定具体的计算逻辑。确保在所有情况下,赋值给矩阵某一行的向量长度都正确无误。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群