【问题标题】:sapply() with with vector of values instead of 1:nsapply() 带有值向量而不是 1:n
【发布时间】:2013-10-16 10:52:38
【问题描述】:

我想要一份格式如下的sapply() 声明:

a <- c(4, 9, 20, 3, 10, 30)
sapply(c(a), function(x) b[x,2] - b[x,1])

通常我会使用1:x 而不是c(a),但是现在我只想查看a 中指定的值。这可能吗?

更新: 重点不是function(x) 之后的内容——这只是一个示例。

【问题讨论】:

  • b[a,2] - b[a,1] 不起作用吗?
  • 你所拥有的有什么问题?它按预期完美运行。
  • sapply( a , print ) 例如。您将看到它完全按照您的预期工作。究竟是什么问题?
  • 问题不是关于如何解决这个玩具减法问题,而是如何使用 sapply 来遍历任意数字的向量而不是 1:n 序列
  • 答案是就像你做的那样

标签: r sapply subset


【解决方案1】:

根据文档(参见?sapply),sapply 的第一个参数(X)可以是向量。向量没有限制,它必须是1:x 的形式。所以你当前的代码应该正确循环a的值:

sapply(c(a), function(x) b[x,2]-b[x,1]) 

请注意,您不需要 c(a) - 只需 a 即可:

sapply(a, function(x) b[x,2]-b[x,1])

如果由于某种原因您没有与我们沟通,这不起作用,这不是 sapply 的问题,而是您传递给它的函数。

【讨论】:

    【解决方案2】:

    目前还不是很清楚您要达到的目标,但我认为您不需要sapply

    a <- c(4, 9, 20, 3, 10, 30)
    b <- data.frame(x = 1:30, y = sqrt(1:30))
    b[a, 2] - b[a, 1]
    ## [1]  -2.000000  -6.000000 -15.527864  -1.267949  -6.837722 -24.522774
    

    【讨论】:

    • 我想要的只是将 'a' 中指定的值用作 'x',而不是遍历 1:n 间隔
    【解决方案3】:

    您是否只想对a 中指定的值执行该函数,否则保留原始值?因为你不提供b,所以这里再举一个例子。

    v <- 1:40
    a<-c(4,9,20,3,10,30)
    sapply(v, function(x) if(x %in% a){x+1} else {x})
    

    【讨论】:

    • 是的,我认为你是对的(他们追求的是价值而不是指数)。但是,它们在您的示例中重合...identical(v,seq_along(v))
    • 是的,但这对函数无关紧要。您可以将v 替换为另一个向量。
    猜你喜欢
    • 2022-10-14
    • 2022-01-08
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多