Новый фрейм данных после функции пуст - PullRequest
1 голос
/ 28 мая 2019

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

Я попробовал этот код:

data_a <- as.data.frame(cbind(pop=c("a1","b2","c3","d4","d5"),
                         PA1=c(1,40,430,4330,43330),
                        PA2=c(2,50,530,5330,53330)))

perm_all <- function(dat,vname,loc1, loc2){
  popu <- dat["vname"]
 locci_1 <- sample(dat["loc1"], replace = F)
 locci_2 <- sample(dat["loc2"], replace = F)
 data_a_1 <- as.data.frame(cbind(popu, locci_1, locci_2))
  return(data_a_1)
 }

data_3 <- perm_all(dat= "data_a",vname="pop",loc1="PA1",loc2="PA2")

Я пытался преобразовать data_a с

data_a <- as.matrix(data_a)

и

 popu <- sample(dat[,1], replace = F)

но они тоже не работали

Спасибо:)

1 Ответ

1 голос
/ 28 мая 2019

Возможно, есть несколько проблем.Во-первых, когда вы создали свой фрейм данных, имейте в виду, что семейство функций data.frame по умолчанию рассматривает строку как фактор.Это может быть не то, что вы хотите.

Тогда @NURAIMIAZIMAH прав, вашей функции нужен фрейм данных для правильной работы, поэтому:

data_3 <- perm_all(dat= data_a,vname="pop",loc1="PA1",loc2="PA2")

- хорошее начало.

Более того, вы присваиваете значение вектору, например vname, loc1 и loc2.Но вы используете только имя этих объектов в своей функции, потому что вы забыли удалить кавычку.

perm_all <- function(dat,vname,loc1, loc2){
  popu <- dat[vname]
  locci_1 <- sample(dat[loc1], replace = F)
  locci_2 <- sample(dat[loc2], replace = F)
  data_a_1 <- as.data.frame(cbind(popu, locci_1, locci_2))
  return(data_a_1)
}

Теперь ваша функция должна работать, но, возможно, не так, как вы хотели бы.Потому что в вашей таблице data_3 не будет никаких перестановок.Если вы внимательно посмотрите, тип возврата этой части кода dat[loc1] является фреймом данных.Вы, конечно, хотите, чтобы вектор переставлял ваши данные, поэтому вам нужно настроить подкадр данных следующим образом: dat[,loc1].

Этот код должен делать то, что вы ожидаете.

data_a <- as.data.frame(cbind(pop=c("a1","b2","c3","d4","d5"),
                              PA1=c(1,40,430,4330,43330),
                              PA2=c(2,50,530,5330,53330)))

perm_all <- function(dat,vname,loc1, loc2){
  popu <- dat[vname]
  locci_1 <- sample(dat[,loc1], replace = F)
  locci_2 <- sample(dat[,loc2], replace = F)
  data_a_1 <- as.data.frame(cbind(popu, locci_1, locci_2))
  return(data_a_1)
}

data_3 <- perm_all(dat= data_a,vname="pop",loc1="PA1",loc2="PA2")

См.вы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...