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