2015-04-23 3 views
2

Я хочу использовать sapply для создания матрицы из 2 столбцов, 8 строк. Первый столбец от 1 до 8, а второй столбец - квадрат первого. Я сделал sapply(1:8, function(x), c(x,x^2)), поэтому я получил 8 столбцов и 2 строки вместо двух столбцов и 8 строк. Как заменить столбцы по строкам?Как получить 2 столбца, 8 строк матрицы вместо возврата 2 строки, 8 столбцов матрицы, используя sapply?

ответ

4

По умолчанию для sapply есть по существу cbind окончательный выход. Вы можете сказать, что это не упрощает или просто переносит ваш результат.

# manual rbind 
do.call("rbind", sapply(1:8, function(x) c(x,x^2), simplify=FALSE)) 

# transpose result 
t(sapply(1:8, function(x) c(x,x^2)))  
5

попробуйте использовать t

> t(sapply(1:8, function(x) c(x,x^2))) 
    [,1] [,2] 
[1,] 1 1 
[2,] 2 4 
[3,] 3 9 
[4,] 4 16 
[5,] 5 25 
[6,] 6 36 
[7,] 7 49 
[8,] 8 64 

Вообще-то нет необходимости использовать sapply для этого, просто использовать matrix

> x <- 1:8 
> matrix(c(x,x^2), ncol=2) 
+0

Спасибо большое – Nour