2013-03-15 6 views
17

Это работаетNon символьный аргумент в R строки разделенной функции (strsplit)

x <- "0.466:1.187:2.216:1.196" 
y <- as.numeric(unlist(strsplit(x, ":"))) 

Значения blat$LRwAvg все выглядят как X выше, но это не работает

for (i in 1:50){ 
    y <- as.numeric(unlist(strsplit(blat$LRwAvg[i], "\\:"))) 
    blat$meanLRwAvg[i]=mean(y) 
} 

Из:

Ошибка в strsplit (blat $ LRwAvg [i], "\:"): несимвольный аргумент

Не имеет значения, есть ли у меня одна, две или нулевые обратные косые черты.

В чем моя проблема? (Не вообще, я имею в виду в этой специальной задачи, технически)

+0

Какой выход из 'класса (блат $ LRwAvg)', и вы можете дать нам некоторые данные из 'blat $ LRwAvg' – alexwhan

+3

@AWE Это тип ошибки. принуждение аргумента к характеру, 'as.character (blat $ LRwAvg)' – agstudy

+1

@alexwhan Я заметил, что так удалил мой комментарий, но не достаточно быстро: $. Похоже, что это проблема с факторами. Так что принуждение к характеру, как @agstudy предлагает, или использовать 'stringsAsFactors = FALSE' при создании data.frame. – James

ответ

17

Как agstudy подразумеваемой blat$LRwAvg <- as.character(blat$LRwAvg) перед выполнением цикла фиксированной его

blat$meanLRwAvg <- blat$gtFrqAvg #or some other variable in data frame with equal length 
blat$LRwAvg <- as.character(blat$LRwAvg) 
for (i in 1:50){ 
    y <- as.numeric(unlist(strsplit(blat$LRwAvg[i], "\\:"))) 
    blat$meanLRwAvg[i]=mean(y) 
}