Возможно, есть несколько проблем.Во-первых, когда вы создали свой фрейм данных, имейте в виду, что семейство функций 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")
См.вы.