объединить матрицы неравной длины в цикле с помощью cbind () - PullRequest
1 голос
/ 23 марта 2011

У меня простой вопрос, но он стоил мне часов.Я хотел бы cbind () матрица и датафрейм.Дело в том, что они не имеют одинаковую длину.

матрица:

условие

        [,1]

ILMN_1666845 ИСТИНА

ИЛМН_1716400 ИСТИНА

Data.frame

a

t1 t2 t3 t4 1 0 1 1 1

Если я использую cbind () без цикла, все в порядке, и эторезультат:

b <-cbind (условие, а) b </p>

        condition t1  t2  t3  t4

ILMN_1666845 ИСТИНА 0 1 1 1

ILMN_1716400 ИСТИНА 0 1 1 1

Но в цикле for я получаю следующую ошибку: Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают различное количество строк: 0, 1

Может кто-нибудь мне помочь?Спасибо!

Для кода цикла:

для (p в 1: nrow (результаты)) {

id <- применить (регулируется, 1, функция (i) </p>

сумма (i [1: длина (регулируемая)]! = результаты [p,]) == 0)

idd <-as.matrix (id) </p>

условие = подмножество (idd, idd [, 1] == TRUE)

a <-as.data.frame (t (результаты [p,])) ​​</p>

b <-cbind (условие, а) </p>

write.table (b, "file.txt", append = TRUE)}

1 Ответ

2 голосов
/ 23 марта 2011

Насколько я мог прочитать из вашего кода, вы пытаетесь связать возможный пустой объект, который никогда не работает.Это также то, что говорит вам ошибка.Возможно, в какой-то момент a просто пусто, поскольку совпадений нет.Так что просто добавьте условие

if(sum(id) !=0) { ... }

Вы можете получить много пользы от переписывания кода, чтобы учесть это.Я попытался угадать, что вы хотели сделать, и этот код делает то же самое:

xx <- apply(outcomes,1,function(p){
    id <- apply(regulationtable,1,function(i)
      sum(i != p ) == 0)
    if(sum(id) !=0)
     cbind(as.data.frame(id[id]),t(p))
})

write.table(do.call(rbind,xx),file="file")

Он возвращает вам список хх с, для каждого возможного результата, генами, которые имеют один и тот же регуляторный шаблон.Это проверено с:

outcomes <- expand.grid(c(0,1),c(0,1),c(0,1),c(0,1))

regulationtable <- data.frame(
    t1=sample(0:1,10,replace=T),
    t2=sample(0:1,10,replace=T),
    t3=sample(0:1,10,replace=T),
    t4=sample(0:1,10,replace=T)
)
rownames(regulationtable) <- paste("Gene",1:10,sep="-")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...