我创建了一个函数,该函数包含函数输入中一系列带有各种对象的减法和加法,我想知道如何执行这些操作,而不必每次添加时都复制并粘贴现有代码一个新对象。
a <- function(qt1,qt2,qt3,qt4,
cu1,cu2,cu3,cu4,
gpd1,gpd2,gpd3,gpd4,
cs1,cs2,cs3,cs4,
csp1,csp2,csp3,csp4,
cp1,cp2,cp3,cp4,
ms1,ms2,ms3,ms4,
ad1,ad2,ad3,ad4)
{
c1 = (qt1 * cu1) +gpd1 + cs1 + csp1+ce+cp1
c2 = (qt2 * cu2) +gpd2 + cs2 + csp2+ce+cp2
c3 = (qt3 * cu3) +gpd3 + cs3 + csp3+ce+cp3
c4 = (qt4 * cu4) +gpd4 + cs4 + csp4+ce+cp4
ct1 = (c1 * 0.4)+c1 + e/4+cap+ ms1+ qt1 *ad1
ct2 = (c2 * 0.4)+c2 + e/4+cap+ ms2+ qt2 *ad2
ct3 = (c1 * 0.4)+c3 + e/4+cap+ ms3+ qt3 *ad3
ct4 = (c1 * 0.4)+c4 + e/4+cap+ ms4+ qt4 *ad4
print("RU 1")
print(ct1/qt1)
print("RU 2")
print(ct2/qt2)
print("RU 3")
print(ct3/qt3)
print("RU 4")
print(ct4/qt4)
}
a(qt1=10,qt2=15,qt3=18,qt4=20,
cu1=5,cu2=2,cu3=12,cu4=17,
gpd1=2,gpd2=5,gpd3=8,gpd4=8,
cs1=2,cs2=4,cs3=2,cs4=5,
csp1=2,csp2=3,csp3=4,csp4=4,
cp1=2,cp2=2,cp3=2,cp4=2,
ms1=2,ms2=2,ms3=4,ms4=5,
ad1=1,ad2=2,ad3=3,ad4=4)
答案 0 :(得分:5)
这很简单。利用向量而不是将向量作为单独的参数传递。
# qt <- c(qt1, qt2, qt3, qt4)
# cu <- c(cu1, cu2, cu3, cu4)
qt <- c(1, 2, 3, 4)
cu <- c(1, 2, 3, 4)
所有操作在向量上的作用都相同,因此您不必一遍又一遍地显式执行表达式。
# Addition/Subtraction
qt + cu
[1] 2 4 6 8
# Multiplication
qt * cu
[1] 1 4 9 16
# Division
qt / 2
[1] 0.5 1.0 1.5 2.0
答案 1 :(得分:0)
您还可以将参数视为特征。
library(tidyverse)
df_example <- tribble(~cu,~q,~gpd,~cs,~csp,~ce,~cp,~e,~cap,~qt,~ms,~ad,
1,2,3,4,5,6,7,8,9,10,11,12,
2,4,6,8,10,12,14,16,18,20,22,24)
df_example %>%
mutate(c = (qt * cu) +gpd + cs + csp+ce+cp,
ct = (c * 0.4) + c + e/4+cap+ms+qt+ad,
result = ct/qt) %>%
pull(result)
答案 2 :(得分:0)
在R中,像许多数据科学工具一样,学习使用诸如数据框架之类的集合来跨许多数据点运行所需的分析。因此,为了piggy带技能谋杀者的answer,请考虑使用一个数据帧,该数据帧在R中是一个class
对象,该对象扩展了由相等长度的原子向量组成的list
类型。
使用这种方法,您可以将范围扩展到仅四个“对象”,而无需更改计算代码或仅打印单个项目。但是,您的数据最初采用宽格式(以后缀名称表示)。但是,如果您将reshape
设为长格式,则可以轻松运行公式计算。请参见此demo将输入值迁移为长格式,如下所示。
long_df
# id qt cu gpd cs csp cp ms ad
# 1 RU 1 10 5 2 2 2 2 2 1
# 2 RU 2 15 2 5 4 3 2 2 2
# 3 RU 3 18 12 8 2 4 2 4 3
# 4 RU 4 20 17 8 5 4 2 5 4
# CALCULATIONS
long_df<- within(long_df, {
c <- (qt * cu) + gpd + cs + csp + ce + cp
ct <- (c * 0.4)+c + e/4+cap+ ms+ qt * ad
ratio <- ct/qt
})
long_df[c("id", "ratio")]
# id ratio
# 1 RU 1 9.685000
# 2 RU 2 6.483333
# 3 RU 3 21.469444
# 4 RU 4 29.562500
使用与e <- 1
,ce <- 1
,cap <- 2
相同的未知输入来复制打印输出。
# [1] "RU 1"
# [1] 9.685
# [1] "RU 2"
# [1] 6.483333
# [1] "RU 3"
# [1] 17.60278
# [1] "RU 4"
# [1] 23.5425