Сделать переменную как оператор [duplicate]

Другим вариантом, если производительность является проблемой, является использование расширения data.table для расширения reshape2 расплава & amp; dcast functions

( Ссылка: эффективная перестройка с использованием data.tables )

library(data.table)

setDT(dat1)
dcast(dat1, name ~ numbers, value.var = "value")

#          name          1          2         3         4
# 1:  firstName  0.1836433 -0.8356286 1.5952808 0.3295078
# 2: secondName -0.8204684  0.4874291 0.7383247 0.5757814

И, как и в data.table v1.9.6, мы можем использовать несколько столбцов

## add an extra column
dat1[, value2 := value * 2]

## cast multiple value columns
dcast(dat1, name ~ numbers, value.var = c("value", "value2"))

#          name    value_1    value_2   value_3   value_4   value2_1   value2_2 value2_3  value2_4
# 1:  firstName  0.1836433 -0.8356286 1.5952808 0.3295078  0.3672866 -1.6712572 3.190562 0.6590155
# 2: secondName -0.8204684  0.4874291 0.7383247 0.5757814 -1.6409368  0.9748581 1.476649 1.1515627

0
задан texasCode 18 October 2011 в 07:15
поделиться

4 ответа

Это невозможно, но это:

var operators =
{
    '<': function(a, b) { return a < b; },
    '>': function(a, b) { return a > b; },
    /* ... etc. ... */
};

/* ... */

var op1 = '<';
var op2 = '>';
if (operators[op1](a, b) && operators[op2](c, d))
{
    /* ... */
}
4
ответ дан bobbymcr 19 August 2018 в 10:31
поделиться

Не напрямую, но вы можете создать такую ​​функцию:

if (operate(op1, x, xval) && operate(op2, x, xval)) {
    console.log('yay');
}
function operate(operator, x, y) {
    switch(operator) {
        case '<':
            return x < y;
    }
}
2
ответ дан deviousdodo 19 August 2018 в 10:31
поделиться

Это не приятно, но возможно:

var op1 = "<";
var op2 = ">";

if (eval("x"+op1+xval+" && y"+op2+yval)) {
    console.log('yay');
}

Также см. мой jsfiddle . Я бы предпочел ответить на bobbymcr.

0
ответ дан scessor 19 August 2018 в 10:31
поделиться

Вы могли бы сделать что-то вроде этого.

var OpMap = {
          '>': function (a,b) return a>b;},
          '<': function (a,b) return a<b;}
}

if (OpMap[op1](x,xval) && OpMap[op2](y,yval)) {
 console.log('yay');
}
0
ответ дан spicavigo 19 August 2018 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: