Написание функции с текстовыми аргументами

#r #function

#r #функция

Вопрос:

У меня есть матрица (colormatrix), которая в первом столбце (называемом NCS.code) имеет идентификатор, а во втором столбце (называемом colour.assignment) — названия цветов.

Я хотел бы создать функцию (changecolor), которая может изменять название цвета (то есть значение colour.assignment) на основе имени идентификатора. Я написал следующее, но это не работает.

 changecolor<-function(id,color){
locdat<-match(id, colormatrix$NCS.code)
#finds the location where id matches the identifier
colormatrix_lab$colour.assignment[locdat]<-color}
#changes the color name at location locdat into the name that was given as input
changecolor("S0300-N","white")
#test if the code works -- which is not the case.
  

Спасибо за всю помощь.

Комментарии:

1. Могу ли я предложить не использовать <<- , а вместо этого вывести измененную матрицу. Ваш вызов будет выглядеть следующим образом: newmatrix <- changecolor(oldmatrix, "S0300-N","white")

Ответ №1:

Если вы хотите изменить глобальные переменные из вызовов функций, вы не можете использовать <- , потому что это не будет оцениваться в глобальной области видимости. Чтобы сделать то, что вы хотите, попробуйте использовать: <<- при изменении глобальных структур данных из вызовов функций.

Комментарии:

1. Спасибо, это работает. Я не знал об этой проблеме — я посмотрю ее.

2. Просто будьте осторожны при использовании <<- . Из-за побочных эффектов (изменение объектов в вызывающей среде) это затрудняет прогнозирование поведения вашего кода.