2017-01-18 7 views
3

Я хочу, чтобы создать dataframe внутри функции, выбор столбцов в dataframe дКак передать имена столбцов в R-функции?

QPP<-function(dat,xvar,yvar){ 
    varx <<- dat[,c(xvar)] 
    vary <<- dat[,c(yvar)] 
    a <- cbind(varx,vary) 
    a <- as.data.frame(a) 
    #Perform some operations 
} 

QPP(dat=d,xvar = area,yvar = f.ecdf) 

Но я получаю сообщение об ошибке:

Ошибка в Eval (выражение, ENVIR, Enclos): аргумент отсутствует, не по умолчанию

  1. Как я могу это исправить?
  2. В качестве альтернативы, можно ли выбрать имена столбцов за один шаг, а не выбирать, а затем перетаскивать его? Я не уверен, как передать имена столбцов.

    dput(droplevels(head(d,10))) 
    structure(list(area = c(96.8656, 96.8656, 562.0274, 117.5855, 
    117.5855, 117.5855, 117.5855, 117.5855, 117.5855, 117.5855), 
    tp = c(1.5, 1, 0.5, 4.5, 6, 8.25, 4.25, 5.75, 10.75, 20.25 
    ), f.ecdf = c(0.887918176006819, 0.812380140634988, 0.760387811634349, 
    0.0372895802258683, 0.00809716599190283, 0.0310036224163648, 
    0.300660558278287, 0.441721713189857, 0.152354570637119, 
    0.386852759428937)), .Names = c("area", "tp", "f.ecdf"), row.names = c(NA, 
    -10L), class = c("data.table", 
    "data.frame")) 
    
+1

Попробуйте использовать 'QPP (dat = d, xvar =" area ", yvar =" f.ecdf ")' – HubertL

+0

Я пробовал это. Я не получаю dataframe с числами, а ядром данных с областью имен и f.ecdf. Должен ли я сначала привязать набор данных? – maximusdooku

+0

Почему вы просто не делаете 'dat [, c (" area "," f.ecdf ")]'? Зачем нужна эта функция? – aichao

ответ

2

Ваша функция прекрасно. Существует проблема с тем, как вы передаете аргумент. Вы должны передавать строки как имена переменных.

Попробуйте QPP(dat=d,xvar = "area" ,yvar = "f.ecdf")

Теперь, это происходит потому, что если вы заметили df[,c("col_name")] аргумент «col_name» является строка

Что касается вашего вопроса 2: Это, как вы можете сделать это один шаг без использования cbind

QPP<-function(dat,xvar,yvar) 
{ 
colnames<- c(xvar, yvar) 
new_df <<- dat[, c(colnames)] 
} 

QPP(dat=d,xvar = "area" ,yvar = "f.ecdf") 
+0

Я пробовал передать строку. Я получаю это. Я также упомянул проблему в комментариях. Не знаю, в чем проблема ... new_df [1] "area" "f.ecdf" – maximusdooku

+0

Хорошо, я начал новую сессию R, и теперь она работает. Благодарю. Не уверен, почему он не работал до этого. – maximusdooku

+0

Хорошо, это то, что я обнаружил. Я импортировал свой dataset d, используя fread, который дает мне таблицу данных. Как только я превратил это в блок данных, эта проблема утихает. – maximusdooku

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