Это еще один вариант, который не был предложен ранее. NROW
рассматривает ваш вектор как матрицу из 1 столбца.
v[-max(NROW(v))]#1 2
v1[-max(NROW(v1))]#4 5 6 7
Исходя из вышеизложенного, это (немного) быстрее, чем все другие предложенные методы:
x <- rnorm(1000)
system.time(replicate(50000, y <- head(x, -1)))
user system elapsed
3.446 0.292 3.762
system.time(replicate(50000, y <- x[-length(x)]))
user system elapsed
2.131 0.326 2.472
system.time(replicate(50000, y <- x[-max(NROW(x))]))
user system elapsed
2.076 0.262 2.342
Может быть, вы можете использовать директиву "unexport", чтобы предотвратить распространение TARGET в make-файл B?
В точке, где система сборки A вызывает систему сборки B, не используйте ' $ {MAKE}
»напрямую; вызвать сценарий оболочки, который вызывает систему сборки B (возможно, после очистки среды).
Чтобы добиться поведения, при котором команды выполняются с помощью ' make -n
', добавьте к командной строке в make-файле префикс « +
» (аналогично префиксу строки « @
» или « -
»).
Вы можете установить для параметра MAKEOVERRIDES значение ничего в make-файле второго уровня в A.
callb:
cd subdir && $(MAKE) MAKEOVERRIDES=
Это передает стандартные параметры командной строки, такие как -k и -s , но не определения переменных командной строки.
Или вы используете исторический MFLAGS , который аналогичен MAKEFLAGS , за исключением MFLAGS не содержит определений переменных командной строки.
callb:
cd subdir && $(MAKE) $(MFLAGS)
Подробности об этих двух параметрах можно прочитать здесь: Руководство GNU Make