Я хотел бы передать имя имени столбца в качестве переменной функции. В частности, учитывая следующий код:Заменить переменную на строковое значение в R
#------------------------------------------
# Create mock data
#------------------------------------------
DF1 = data.frame(colA = as.Date("2015-09-21") + 0:4, B = 1:5, C = 5:1)
DF2 = data.frame(B = 1:5, C = 5:1)
#------------------------------------------
# Sample function call
#------------------------------------------
colname <- "colA"
b_func <- function(my_dt1, my_dt2, my_col) {
return(eval(substitute(cbind(variable = as.Date("2015-09-21") + 0:4, DF2),
list(variable = as.name(my_col)))))
}
b_func(DF1, DF2, colname)
Я бы ожидать, чтобы получить следующий вывод:
colA B C
1 2015-09-21 1 5
2 2015-09-22 2 4
3 2015-09-23 3 3
4 2015-09-24 4 2
5 2015-09-25 5 1
Вместо этого я получаю следующий результат, где вместо "colA"
я получаю "variable"
.
variable B C
1 2015-09-21 1 5
2 2015-09-22 2 4
3 2015-09-23 3 3
4 2015-09-24 4 2
5 2015-09-25 5 1
Раскопки далее я обнаружил, что:
colname <- "colA"
substitute(cbind(variable = as.Date("2015-09-21") + 0:4, DF2), list(variable = as.name(colname)))
# returns: cbind(variable = as.Date("2015-09-21") + 0:4, DF2)
# expected: cbind(colA = as.Date("2015-09-21") + 0:4, DF2)
Этот пример основан на документации в R FAQ, но я не могу заставить его работать. Было бы высоко оценено решение и краткое объяснение.
Заранее спасибо.
'setNames()' будет намного безопаснее маршрут (после 'cbind()') –
Спасибо Ричарду. Отличное предложение. – Stan