【发布时间】:2023-03-07 07:22:01
【问题描述】:
这不是要求新代码,而是更多关于 R 如何进行这样的计算。当然,我会采取任何和所有的建议来提高它的效率。
假设我有一个这样的脚本:
x=matrix(complex(1:10,1:10,imaginary = 1:10),ncol=2)
y=x+300
raw=list(x,y)
raw_complex = list(raw,raw,raw,raw)
这是一个复杂矩阵的列表。我正在尝试从中获取相位角:phase = atan(Im(x)/Re(x))
我当前的代码是:
for (m in 1:length(raw_complex)){
for (n in 1:length(raw_complex[[m]])){
for (i in 1:dim(raw_complex[[m]][[n]])[1]){
for (j in 1:dim(raw_complex[[m]][[n]])[2]){
raw_complex[[m]][[n]][i,j]=(atan(Im(raw_complex[[m]][[n]][i,j])/Re(raw_complex[[m]][[n]][i,j])))
}}}}
我知道,我知道,避免 R 中的 for 循环。但从概念上讲,这让我更容易看到与 lapply 或 sapply 相比发生了什么。
我的问题是,在循环的每次迭代中,R 是否会在内存中复制整个列表或矩阵,而不是一次拉出每个单独的元素?显然我不希望 R 每次迭代都制作完整的副本。
我的真实数据集有一个 4 列表,列表的每个元素中有 95 个矩阵。每个矩阵都是 145x901,所以你可以看到我希望它尽可能快。
哦,如果输出是实数而不是复数,那就太好了。我尝试在atan() 前面添加as.numeric(),但这似乎没有帮助。
谢谢!
【问题讨论】:
-
输出很复杂。不科学但虚部为0
标签: r loops memory-management