r - R中函数内嵌套变量的for循环
问题描述
我想在 R 的函数环境中遍历值向量并为每个值计算一些东西。例如:
# I have costs for 3 companies
c <- c(10, 20, 30)
# I have the same revenue across all 3
r <- 100
# I want to obtain the profits for all 3 within one variable
result <- list()
# I could do this in a for loop
for(i in 1:3){
result[i] <- r - c[i]
}
现在假设我有一个很长的模型,并且我将所有内容定义为一个函数,该函数将通过各种随机抽取来解决成本。
# Random draws
n <- 1000
r <- rnorm(n, mean = 100, sd = 10)
c1 <- rnorm(n, mean = 10, sd = 1)
c2 <- rnorm(n, mean = 20, sd = 2)
c3 <- rnorm(n, mean = 30, sd = 3)
X <- data.frame(r, c1, c2, c3)
fun <- function(x){
r <- x[1]
c <- c(x[2], x[3], x[4])
for(i in 1:3){
result[i] <- r - c[i]
}
return(result)
}
然后,我可以通过遍历随机采样的输入数据行来评估所有抽奖的结果。
for(j in 1:n){
x <- X[j,]
y <- fun(x)
}
在此示例中,输出变量 y 将包含嵌套结果变量,该变量包含所有 3 家公司的结果。但是,我的思路导致错误,我认为这与我尝试返回嵌套变量的事实有关?因此,我的问题是你们将如何处理这样的事情。
解决方案
我建议重新考虑您的编码方法。这是一种非常不像 R 的做事方式。
例如,第一个for
循环可以更简洁地写为
x <- c(10, 20, 30)
r <- 100
result <- lapply(-x, `+`, r)
然后fun
变成类似
fun <- function(x) lapply(-x[-1], `+`, x[1])
然后对 a 的行进行操作data.frame
(这就是您在最后一步中所做的),您可以使用类似
apply(X, 1, fun)
其中的MARGIN = 1
参数apply
确保您每行(而不是每列)应用一个函数。
推荐阅读
- sql-server - 如何动态插入 COLUMN 值?
- python - 我有一个 pytorch 图像分类器训练,我想暂停训练并在程序暂停时保存权重。我可以这样做吗?
- shell - 如何将 sh 的输出保存到 Groovy 变量?
- google-search - Google Custom Search Site Restricted JSON API 超过 10 个站点
- java - 如何将 ApiParam 传递给另一个变量的验证器?
- sql-server - 如何在 SQL Server 2008 中将 dbo 所有权更改为另一个用户登录?
- java - 使用for循环解除阻塞“保持”的方法?
- curl - 我们如何使用 curl 搜索 nexus repo 标签?
- java - 使用 gradle 在 Jar 中包含 pom.xml
- keras - LSTM 网格搜索