Как предлагает @Gregor, для решения вашей основной проблемы рассмотрите возможность создания фрейма данных всех необходимых значений в соответствующих столбцах. Затем запустите каждую строку, чтобы получить Оценка .
В частности, для построения необходимого фрейма данных из входных данных в таблице Excel, рассмотрим конструктор Map
(оболочка для mapply
) и data.frame
в списке одинаковой длины или векторы из 17 элементов:
Входы в таблицу Excel
# VECTOR OF 17 CHARACTER ITEMS
stage_list <- c(rep("Inspection", 2),
rep("Cut", 2),
rep("Assembling", 2),
rep("Test", 2),
rep("Labelling", 2),
rep("Dimensions", 7))
# VECTOR OF 17 CHARACTER ITEMS
exp_equip <- c("Experience level", "Equipement")
var_list <- c(rep(exp_equip, 3),
c("User", "Equipement"),
exp_equip,
c("Length", "Wide", "Length body", "Width body",
"Tape wing", "Tape body", "Clip"))
# LIST OF 17 VECTORS
bma_range <- c("b", "m", "a")
noyes_range <- c("no", "yes")
range_list <- c(replicate(6, bma_range, simplify=FALSE),
list(c("UA", "UB", "UC")),
replicate(3, bma_range, simplify=FALSE),
list(seq(6.5, 9.5, by=0.1)),
list(seq(11.9, 12.1, by=0.1)),
list(seq(6.5, 9.5, by=0.1)),
list(seq(4, 6, by=1)),
replicate(3, noyes_range, simplify=FALSE))
Map
+ data.frame
df_list <- Map(function(s, v, r)
data.frame(Stage = s, Variable = v, Range = r, stringsAsFactors=FALSE),
stage_list, var_list, range_list, USE.NAMES = FALSE)
# APPEND ALL DFS
final_df <- do.call(rbind, df_list)
head(final_df)
# Stage Variable Range
# 1 Inspection Experience level b
# 2 Inspection Experience level m
# 3 Inspection Experience level a
# 4 Inspection Equipement b
# 5 Inspection Equipement m
# 6 Inspection Equipement a
Rextester demo
Расчет баллов (с использованием неизвестной функции Score_, предполагается, что она принимает три необязательных аргумента)
# VECTORIZED METHOD
final_df$Score <- score_function(final_df$Stage, final_df$Variable, final_df$Range)
# NON-VECTORIZED/LOOP ROW METHOD
final_df$Score <- sapply(1:nrow(final_df), function(i)
score_function(final_df$Stage[i], final_df$Variable[i], final_df$Range[i])
# NON-VECTORIZED/LOOP ELEMENTWISE METHOD
final_df$Score <- mapply(score_function, final_df$Stage, final_df$Variable, final_df$Range)