如何使用 apply 函数而不是嵌套的 for 循环?
How to use apply function instead of nested for loop?
我目前有一个大矩阵 (3000x20),想使用第一行第一列中的值和一个向量来计算一个值。我的数据集(在 excel 中)是这样的(我使用 VBA 代码来创建这个 excel):
SumRow = 0
SumCol = 0
RowInterval = 0.001
ColInterval = 0.01
For i = 2 To 3001
Cells(i, 1).Value = SumRow + RowInterval
SumPD = Cells(i, 1).Value
Next i
For j = 2 To 21
Cells(1, j).Value = SumCol + ColInterval
SumRho = Cells(1, j).Value
Next j
我目前正在使用以下 R 代码进行计算
InputVector <- c(1,2,3,4,5,6,7,8,9,10)
Testing<-read.csv("InputFile.csv", header=FALSE)
for (m in (2:(3001)))
{ for (n in (2:21))
{ Sum = 0
Row = Testing(m,1)
Col = Testing(1,n)
for (p in (1:length(InputVector)))
{ Sum = Sum + sqrt((1-Col)/Col)*exp(Row) }
Testing[m,n] = Sum } }
write.csv(Testing, "TestingOutput.csv")
基本上它首先将向量(x 值)放入公式 f(x) 中,我想在 excel 上打印 f(x) 的总和,其中第一行和第一行列出了不同的参数excel 中的列。
我 运行 上面的代码可以运行,但是需要很长时间。我是 Apply Function 的新手,我可以知道如何使用 Apply 函数来加速计算并执行与上述相同的输出吗?
这是针对您的问题的三行 R 解决方案,包括生成数据:
library(reshape2)
# generate the combinations to iterate over
vInput = seq(1, 10)
dfSeq = expand.grid(rowSeq = seq(from = 0, by = 0.001, length.out = 3000),
colSeq = seq(from = 0, by = 0.01, length.out = 20))
# generate the values
dfSeq = cbind.data.frame(result = mapply(function(row, col) {
length(vInput)*sqrt((1-col)/col)*exp(row)
}, dfSeq$rowSeq, dfSeq$colSeq), dfSeq)
# cast them in the shape required
dfSeqWide = dcast(dfSeq, rowSeq~colSeq, value.var = "result")
我目前有一个大矩阵 (3000x20),想使用第一行第一列中的值和一个向量来计算一个值。我的数据集(在 excel 中)是这样的(我使用 VBA 代码来创建这个 excel):
SumRow = 0
SumCol = 0
RowInterval = 0.001
ColInterval = 0.01
For i = 2 To 3001
Cells(i, 1).Value = SumRow + RowInterval
SumPD = Cells(i, 1).Value
Next i
For j = 2 To 21
Cells(1, j).Value = SumCol + ColInterval
SumRho = Cells(1, j).Value
Next j
我目前正在使用以下 R 代码进行计算
InputVector <- c(1,2,3,4,5,6,7,8,9,10)
Testing<-read.csv("InputFile.csv", header=FALSE)
for (m in (2:(3001)))
{ for (n in (2:21))
{ Sum = 0
Row = Testing(m,1)
Col = Testing(1,n)
for (p in (1:length(InputVector)))
{ Sum = Sum + sqrt((1-Col)/Col)*exp(Row) }
Testing[m,n] = Sum } }
write.csv(Testing, "TestingOutput.csv")
基本上它首先将向量(x 值)放入公式 f(x) 中,我想在 excel 上打印 f(x) 的总和,其中第一行和第一行列出了不同的参数excel 中的列。 我 运行 上面的代码可以运行,但是需要很长时间。我是 Apply Function 的新手,我可以知道如何使用 Apply 函数来加速计算并执行与上述相同的输出吗?
这是针对您的问题的三行 R 解决方案,包括生成数据:
library(reshape2)
# generate the combinations to iterate over
vInput = seq(1, 10)
dfSeq = expand.grid(rowSeq = seq(from = 0, by = 0.001, length.out = 3000),
colSeq = seq(from = 0, by = 0.01, length.out = 20))
# generate the values
dfSeq = cbind.data.frame(result = mapply(function(row, col) {
length(vInput)*sqrt((1-col)/col)*exp(row)
}, dfSeq$rowSeq, dfSeq$colSeq), dfSeq)
# cast them in the shape required
dfSeqWide = dcast(dfSeq, rowSeq~colSeq, value.var = "result")