Передача имени переменной в функцию - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь передать значение переменной в функцию и использовать ее в простой формуле, но не могу.Это дает мне следующую ошибку

Ошибка в данных $ column_namep: оператор $ недопустим для атомных векторов

Вот код:

test = function(func,data="file3",column_name,x=1){
  func(data$column_name[x])
}

test(sum,column_name = "chemical")

ожидаемый результат, я получаю суммуимя столбца "химический"

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Получить сумму по column_name.Вы можете получить доступ к данным столбца с помощью индекса (нет необходимости использовать имя столбца, я бы предпочел это) или имя столбца.Следующий код предоставляет сумму по столбцу 2, т.е. "Sepal.Width" для iris набора данных.

test = function(func,data=iris,x){
  func(data[,x]) # Can access data using column index or name
}

test(sum,x=2) or test(sum,x="Sepal.Width")

Вывод:

[1] 458.6
0 голосов
/ 17 января 2019

Вы можете добавить инструкцию, которая проверяет числовой тип:

 summer<-function(func,df,col.name){
  x<-df
  mynames<-names(df)
  col.name1<-which(mynames==col.name)
  x<-func(df[col.name1])
  x
  }

лето (сумма, ирис, "Sepal.Width")

summer(sum,iris,"Sepal.Width")
[1] 458.6
0 голосов
/ 17 января 2019

Не то, чтобы это было много смысла для суммирования по одному элементу, вот код, который выполняется без ошибок:

test = function(func,data="file3",column_name,x=1){
  func(get(data)[[column_name]][x])
}

file3 <- iris
test(func = sum, column_name = "Sepal.Length")
[1] 5.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...