Я пытаюсь создать функцию, которая выполнит парное сравнение значений одного столбца с другим и создаст новый вектор в зависимости от этих значений.Я не могу понять, как разрешить двум аргументам быть именами столбцов, которые затем можно изменить, и функцию можно использовать в другом наборе столбцов.Особая ситуация состоит в том, что для родительской птицы есть четыре столбца цветных меток полос (pbc1 ... pbc4) и еще четыре для ее птенца (obc1 ... obc4).Столбцы группы - это столбцы символов, таких как «G», «PG», «B» и т. Д. Это код первой части моей функции, которую я расширю, чтобы включить все парные сравнения после того, как я запустил это:
colourdistance1 <- function(df, refcoldistdf, pbc, obc){
n <- length(pbc)
coldist1 <- rep(NA,n)
for(i in 1:n){
if(pbc[i]==obc[i]){
coldist1[i] <- 0
} else if(pbc[i]=='M'|obc[i]=='M'){
coldist1[i] <- NA
} else if(pbc[i]=='G'& obc[i]=='PG'| obc[i]=='G'& pbc[i]=='PG'){
coldist1[i] <- refcoldistdf[2,2]
} else {
coldist1[i] <- NA
}
}
}
p1o1 <- colourdistance1(bd_df, refcoldistdf,pbc = pbc1, obc = obc1)
Этот вызов просто возвращает объект p1o1 как NULL. Я также пытался:
colourdistance1 <- function(df, refcoldistdf, pbc, obc){
n <- length(pbc)
coldist1 <- rep(NA,n)
for(i in 1:n){
if(df$pbc[i]==df$obc[i]){
coldist1[i] <- 0
} else if(df$pbc[i]=='M'|df$obc[i]=='M'){
coldist1[i] <- NA
} else if(df$pbc[i]=='G'& df$obc[i]=='PG'| df$obc[i]=='G'& df$pbc[i]=='PG') {
coldist1[i] <- refcoldistdf[2,2]
} else {
coldist1[i] <- NA
}
}
}
Но это просто выдает эту ошибку:
Error in if (df$pbc[i] == df$obc[i]) { : argument is of length zero
Я перепробовал всекод за пределами функции, вставка имен столбцов и номер индекса и имя df, и все это работает.Это заставляет меня думать, что у меня есть проблема с аргументами функции, не соединяющимися с кодом функции, как я планировал.Любая помощь будет оценена !!
Воспроизводимые данные испытаний:
pbc1 <- c('B','W','G','R')
obc1 <- c('Y','W','PG','FP')
pbc2 <- c('W','W','W','M')
obc2 <- c('M','W','R','R')
pbc3 <- c('W','K','FP','K')
obc3 <- c('G','PG','B','PB')
pbc4 <- c('K','K','B','M')
obc4 <- c('K','PG','W','M')
testbanddf <- cbind(pbc1,obc1,pbc2,obc2,pbc3,obc3,pbc4,obc4)
testrefcoldist <- diag(11)