【问题标题】:Using sapply inside sapply在 sapply 中使用 sapply
【发布时间】:2019-05-29 18:26:18
【问题描述】:

我需要在另一个 sapply 中执行 sapply。

这是我的工作代码。

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin", "Panda")
a <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(a) <- (animal)

我想在不这样做的情况下构建这个数据框 10 次。

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin", "Panda")

a <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(a) <- (animal)

b <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(b) <- (animal)

...

j <- as.data.frame(sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL))))
colnames(j) <- (animal)

我试过这个没有成功

sapply(letters[1:10], function(z) as.data.frame(sapply(1:7, function(y) rbinom(300, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL)))), colnames(letters[1:10]) <- (animal))

谢谢

【问题讨论】:

  • 在我看来您正在寻找?replicate
  • 我不太清楚输出应该是什么。一个 80x30 的 data.frame?

标签: r sapply


【解决方案1】:

如果您需要使用两个 apply 类型的函数来执行此操作,您可以执行以下操作:

您在animal 中还有八只动物,并且只制作了 7 列。所以我缩短了animal

在外循环上使用lapply 将始终返回一个列表,据我了解您正在尝试这样做,这使它比sapply 更简洁。

animal <- c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin")

lapply(1:10, function(x){
  a <- as.data.frame(
    sapply(1:7, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL)))
  )
  names(a) <- (animal)
  a
})

【讨论】:

    【解决方案2】:

    您正在使用 sapply,因此不清楚您希望最终结果是矩阵还是列表。如果您想要一个矩阵作为输出,那么一种直接的方法是使用您现有的代码,但从一个扩展的向量开始(动物 x 复制)。

    animal.reps = sapply(c("Dog", "Cat", "Bird", "Fish", "Monkey", "Lion", "Dolphin", "Panda"), paste, letters[1:10], sep = ".")
    a = sapply(animal.reps, function(y) rbinom(30, 1, sample(seq(.4, .9, by=.1), 1, prob = NULL)) )
    

    这给出了一个 30x80 的矩阵:

    > dim(a)
    [1] 30 80
    
    > a[1:10, 1:10]
          Dog.a Dog.b Dog.c Dog.d Dog.e Dog.f Dog.g Dog.h Dog.i Dog.j
     [1,]     1     1     1     1     1     0     1     1     1     0
     [2,]     1     1     0     0     1     0     0     1     1     0
     [3,]     1     0     1     1     1     0     1     1     1     0
     [4,]     1     1     0     1     1     1     1     1     1     0
     [5,]     1     1     1     0     1     1     0     1     1     0
     [6,]     0     1     0     1     1     0     0     1     1     1
     [7,]     1     1     0     1     1     1     1     1     1     1
     [8,]     1     1     1     1     1     0     1     1     1     1
     [9,]     1     1     0     1     1     0     1     1     1     0
    [10,]     0     1     1     1     1     1     1     1     1     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 2020-01-22
      • 1970-01-01
      相关资源
      最近更新 更多