Объедините аргументы разных классов - PullRequest
0 голосов
/ 12 июля 2011

Позвольте мне привести пример:

mystr = "foo"
intvector = c(1,2,3,4,5)
trial1 = c(mystr,intvector)
sapply(trial1,class)

trial2 = mat.or.vec(1+length(intvector),1)
trial2[1] = mystr
trial2[2:length(trial2)] = intvector
sapply(trial2,class)

Оба возвращают

        foo           1           2           3           4           5 
"character" "character" "character" "character" "character" "character" 

Как видите, R преобразует / преобразует тип numeric в тип character дляя, что не то, что я хочу.Спасибо:)

РЕДАКТИРОВАТЬ: я буду использовать результат, чтобы добавить (rbind) его непосредственно к data.frame, который изначально будет пустым, поэтому классы столбцов еще не будут определены.

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

Невозможно избежать, если вы не используете списки.Функция c приведет к «наименьшему общему знаменателю», который в данном случае является «символом»:

 trial1 = list(mystr,intvector)
 sapply(trial1,class)
#[1] "character" "numeric"  
1 голос
/ 12 июля 2011

Я считаю, что это должно работать. Если кто-то найдет лучшее решение, не используя списки, пожалуйста, дайте мне знать.

trial3 = data.frame(I(mystr), t(intvector))
sapply(trial3,class)

Производит:

    mystr        X1        X2        X3        X4        X5 
   "AsIs" "numeric" "numeric" "numeric" "numeric" "numeric" 

Обратите внимание, что мы должны обернуть mystr в I и транспонировать интвектор, чтобы это работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...