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