2015-10-28 2 views
1

Вот таблица, в которой я пытаюсь манипулировать:Вычислить значение в столбце для каждой строки

colnames sampA sampB 
#1  conA conB 
#2  1.1 4.4 
#3  2.2 5.5 
#4  3.3 6.6 

Я хочу, чтобы вычислить log2 (х (1-х)) для каждого номера в $ sampB. Вот мой код до сих пор:

DF[-1,3] <- apply(DF[-1,]$sampB,1,function(x) log2(x(1-x))) 

тогда я получил сообщение об ошибке:

 dim(X) must have a positive length 
+0

Каков результат использования 'sapply (DF, class)'? –

+0

Привет, @RichardScriven Я попробовал функцию без log2(), как только x + 1, она показала ту же самую ошибку msg. и conA и conB - это просто текст в исходных данных. Мне не нужны они для расчета, но мне они могут понадобиться позже. –

+0

Хорошо, тогда я думаю, что мой ответ ниже будет работать. Он удаляет первый элемент –

ответ

0

Вы не должны apply() как log2() является векторизация. Попробуйте

x <- as.numeric(as.character(DF$sampB[-1])) 
log2(x * (1 - x)) 

Я снял первый элемент, потому что я не совсем уверен, что это conB часть о (и теперь вы подтвердили это в комментариях). Я также подозреваю, что столбец может быть фактором (из-за conB), поэтому я обернул столбец в as.numeric(as.character(...)). Это может быть необязательно, но лучше безопасно, чем жаль.

+0

Пришел в том случае, когда я импортировал его так, что 'as.numeric (as.character (...)), вероятно, необходимо. – CCurtis

+0

Вы совершенно правы. –

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