Мне кажется, я понимаю ваш вопрос - спасибо за предоставленный полезный пример. Вы не опубликовали сообщение об ошибке, но я предполагаю, что если вы отправили TSplot(df, Location, Variable)
, вы получите сообщение об ошибке "Error in paste(Variable) : object 'variable' not found"
.
Это потому, что ggplot
ожидает, что вы отправите "имя объект ", тогда как вы отправляете имя.
В качестве примера, скажем, вы позволили x
быть этим вектором:
x <- c('red', 'blue')
Вы можете вспомнить этот вектор (" именованный объект " ") если вы просто введете имя, консоль вернет сам объект (вектор):
> x
[1] "red" "blue" # I asked for the object called "x", I got the object itself
Но если вы отправите на консоль "x"
(только имя), вы вернетесь "x"
, а не объект.
> "x"
"x" # thanks, console. That's what I typed. Note this is not the object called "x"
Можно ли отправить «имя», или в этом случае просто «х», и вернуть объект? Да! Для этого вы используете функцию get()
, , которая возвращает значение именованного объекта :
> get("x") # asking for the object named "x"
[1] "red" "blue" # I get the object, not the name
Так что теперь должно быть очевидно, как вы измените свою функцию на работу. Вы можете отправить в функцию имя объекта: function(df)
, например, будет отправлять «весь ваш объект данных» в функцию. Но это не работает для отправки имени компонента внутри этого именованного объекта. Вы можете отправить имя столбца как df$column.name
, но оно не будет работать для отправки function(column.name)
, потому что если вы введете column.name
в консоль, вы не получите df$column.name
.
. Вы можете сделайте так, чтобы ваша функция работала, изменив ее так, чтобы вы включили get()
, где вам нужно «получить» объект, используя только ссылочное имя, так что должно работать примерно так:
Tsplot <- function(df, Variable){
ggplot(df, aes(x = num, y = get(Variable)))+
labs(x= "num(distance)", y=paste(Variable))+
geom_line(aes(color = ID))
}
Вы должны иметь возможность отправить Tsplot(df, 'Var1')
и это будет работать. Если вы отправите Tsplot(df, Var1)
, он не будет работать.
В качестве альтернативы, если вы просто хотите отправить строку символов на aes()
, вы можете просто использовать aes_string()
. Если вы комбинируете вызовы с использованием символов и имен объектов, возможно, лучше использовать aes()
вместе с get()
. Другими словами, aes(x=name, y=get(character))
делает это за один aes()
вызов, но с aes_string()
вам придется использовать два: aes(x=name)
, aes_string(y=character)
.
О, и я угадайте, что это отрывок вашей полной функции , так как пример, который вы разместили там, не включал "Location". То же самое и там.