У меня есть многомерная таблица непредвиденных обстоятельств из 4 переменных. И мне нужно получить значения из этой таблицы, используя вектор длины 4. Вся причина для этого состоит в том, чтобы иметь возможность получить огромный список таких векторов и найти соответствующий вывод из таблицы непредвиденных обстоятельств. Есть ли хороший способ преобразовать c(1,2,3,4)
в my.table[1,2,3,4]
? Вот пример того, что я сейчас делаю только с одним вектором в качестве входных данных:
v = c(1,2,3,4)
my.table = table(my.data.frame[,c("x","y","z","w")])
eval(str2lang(paste0("my.table[", paste0(v, collapse = ", "), "]")))
И это то, что я делаю с большим списком входных векторов, который в моем случае является фреймом данных:
data.frame.of.inputs = data.frame(x = sample(1:4, 100, T), y = sample(1:4, 100, T),
z = sample(1:4, 100, T), w = sample(1:4, 100, T))
my.table = table(some.other.data.frame[,c("x","y","z","w")])
apply(data.frame.of.inputs,1,function(rw)
eval(str2lang(paste0("my.table[", paste0(rw, collapse = ", "), "]"))))
Примечание: чтобы запустить этот код, вы можете инициализировать my.data.frame
и some.other.data.frame
одним и тем же оператором:
data.frame(x = sample(1:4, 100, T), y = sample(1:4, 100, T),
z = sample(1:4, 100, T), w = sample(1:4, 100, T))
Мне не нравится мое текущее решение не только потому, что оно уродливое, но и потому, что оно кажется слишком долгим, чтобы сделать что-то простое.
Кроме того, как мой побочный квест: есть ли способ подмножить таблицу с помощью атрибутов (my.table) $variable.name?
attributes(my.table)[[var]]
, гдеvar
— вектор символов длины 1...)? - person Ben Bolker   schedule 13.05.2021