2017-02-13 4 views
0

У меня есть кадр данных df с 20 столбцами. У меня есть пользовательская функция, чей ввод является именем переменной. Я пытаюсь извлечь конкретный столбец из фрейма данных и вернуть его. Однако я получаю сообщение об ошибке после выполнения следующего кода:Не удалось получить подмножество данных в R

p <- function(param){ 
    df <- read.csv("data.csv",header=TRUE,stringsAsFactors=FALSE) 
    var_name <- eval(substitute(param)) 
    print(df$var_name) 
} 

Функция возвращает NULL. Я подозреваю, что проблема в df$var_name, но я не знаю, как ее решить. Любые указатели были бы полезны.

+1

использовать '[[]]', а не '$' для подмножества с именами столбцов. amd, зачем нужна 'eval (subs ...())'? вы передаете имена столбцов в виде строки вправо? затем непосредственно используйте его внутри '[[]]' –

ответ

0

Попробуйте print(var_name) Предполагая, что у вас нет столбца var_name в вашем фрейме данных. Вероятно, этого не существует. Предполагая, что ваша функция правильная!

0

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

Вышеприведенное предложение не имеет смысла. Имя переменной не совпадает с именем столбца.

Если у вас есть dataframe df с колоннами a, b, c, то df имя переменной, а a, b, c являются имена столбцов (для dataframe df). Таким образом, нет, ваша функция не вводит имя переменной. Он вводит имя столбца.

Если у вас было введенное имя переменной param, то конструкция eval(substitute(param)) имела смысл. Он предоставит вам значение этого имени, например.

a <- 5 
b <- "a" 
eval(substitute(b)) 

принты 5.

Поскольку ваш параметр является именем столбца, конструкция eval(substitute(param)) не имеет смысла. Вы должны получить доступ к колонке, как

df[[,param]] 

(Если df будет матрица, а не dataframe, вы должны получить доступ к его столбец как df[,param] вместо этого).

+0

Я не согласен с большей частью вашей критики в начале вашего ответа: термины, имена столбцов и имена переменных часто используются взаимозаменяемо в моей области (биостатистика) и наборе данных, df , никогда не будет называться переменной. – user20650

+0

Ну, вы можете использовать их взаимозаменяемо, но ваш код не будет работать. – user31264

Смежные вопросы