Объединение векторов, append() и c()

При объединении двух векторов, a и b, в R мне кажется, что

append(a,b)

а также

c(a,b)

дает тот же результат. Есть ли случаи, когда одна из функций должна быть предпочтительнее другой? Предназначен ли append() для операций со списками, а не с векторами?


r
person poplitea    schedule 02.09.2020    source источник
comment
Append может быть полезен в циклах for, если вы хотите добавлять каждую новую вещь, сгенерированную итерациями, в ваш выходной вектор.   -  person RStudious    schedule 02.09.2020
comment
@RStudious c можно с таким же успехом использовать здесь. Однако на самом деле ни один из них не является хорошим кодом: добавление к вектору в цикле очень неэффективно, а также не очень читабельно — обычно (всегда?) это лучше решается с помощью функций типа *apply.   -  person Konrad Rudolph    schedule 02.09.2020
comment
@Конрад Рудольф Спасибо, это было полезно   -  person RStudious    schedule 02.09.2020


Ответы (1)


Взгляните на функцию append(). В основном это добавление аргумента after, который отличает его. В общем, c() будет более эффективным, так как он пропускает эту небольшую часть логики.

function (x, values, after = length(x)) 
{
    lengx <- length(x)
    if (!after) 
        c(values, x)
    else if (after >= lengx) 
        c(x, values)
    else c(x[1L:after], values, x[(after + 1L):lengx])
}
person Adam    schedule 02.09.2020
comment
Совершенно верно. append — это функция с неправильным названием — она должна называться insert и, как правило, не должна использоваться для добавления (поскольку c делает то же самое, но более эффективно), а только при вставке в середину вектора. . - person Konrad Rudolph; 02.09.2020