R 将向量元素赋给矩阵
我希望将R 将向量元素赋给矩阵,r,matrix,sapply,R,Matrix,Sapply,我希望将向量元素分配给矩阵。在我的例子中,在my.fruit中,我有10种水果可供购买。按照sequence.of.purchased.item中所示的顺序购买五片水果样品。我想创建一个矩阵,其中包含购买水果的顺序,如所示。结果 my.fruit <- c('apple', 'orange', 'cherry', 'peach', 'plum', 'apricot', 'pear', 'grapefruit', 'fig', 'olive') sequence
向量
元素分配给矩阵
。在我的例子中,在my.fruit
中,我有10种水果可供购买。按照sequence.of.purchased.item
中所示的顺序购买五片水果样品。我想创建一个矩阵
,其中包含购买水果的顺序,如所示。结果
my.fruit <- c('apple', 'orange', 'cherry', 'peach', 'plum',
'apricot', 'pear', 'grapefruit', 'fig', 'olive')
sequence.of.purchased.item <- c('plum', 'apple', 'plum', 'orange', 'plum')
desired.result <- matrix(c(
2, 0, 0,
4, 0, 0,
0, 0, 0,
0, 0, 0,
1, 3, 5,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0), ncol = 3, byrow = TRUE)
这里有一个较长的描述,描述了如何构建所需的结果。向量my.fruit
本质上是矩阵的行名
所需的.result
。购买的第一颗李子是购买的第一颗水果。1
的序列号位于第五行的第一列,该行表示李子。第二个李子是第三个水果。3
的序列号位于梅花行的第二列。买的第一个苹果是买的第二个水果。因此,数字2被放置在第一行的第一列,这一行代表苹果。第四块买来的水果是桔子。因此,在第二行的第一列中放置一个4,该行表示桔子。
第十行代表橄榄,但没有购买橄榄。同样,没有购买樱桃、桃子、杏子、梨、葡萄柚或无花果。因此,它们的行在所需的.result中都是零
my.fruit <- c('apple', 'orange', 'cherry', 'peach', 'plum',
'apricot', 'pear', 'grapefruit', 'fig', 'olive')
sequence.of.purchased.item <- c('plum', 'apple', 'plum', 'orange', 'plum')
desired.result <- matrix(c(
2, 0, 0,
4, 0, 0,
0, 0, 0,
0, 0, 0,
1, 3, 5,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0), ncol = 3, byrow = TRUE)
但是,sapply
语句没有返回所需的输出
my.output
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 0 0
这可能会容易得多:
my.output <- matrix(0, ncol = 3, nrow = 10)
i <- cbind(purchase.order.row,purchase.order.col)
my.output[i] <- 1:5
my.output使用您在sapply
中的函数在其自身的本地环境中运行,并且在全局环境中不会更改my.output
。您可以使用@AndrewGustar强制它在全球环境中运行谢谢。非常有用。@AndrewGustar使用某种形式的矩阵索引可能比使用更干净,谢谢。我没有投你反对票。我怀疑你的答案被否决了,因为它符合上面评论中已经提出的解决方案。我明白了。别担心。我没有检查之前的评论。
my.output <- matrix(0, ncol = 3, nrow = 10)
i <- cbind(purchase.order.row,purchase.order.col)
my.output[i] <- 1:5