【问题标题】:Multiplying all elements of a vector by each element in a for loop in R将向量的所有元素乘以R中for循环中的每个元素
【发布时间】:2019-07-25 00:58:42
【问题描述】:

我有一个向量 (x),我想乘以一个标量。我希望整个 x 向量乘以每个标量值。

这是我想要的结果示例:

 x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

 scalar <- c(1.2, 1.4, 1.6, 1,7, 1.8, 1.9, 2.0)

 x times 1.2 <- c(1.2, 2.4, 3.6, 4.8, 6, 7.2, 8.4, 9.6, 10.8, 12)

我的最终结果应该是 7 个新向量/列,其中包含 x * 1.2 的每个元素、x * 1.4 的每个元素等等。

我尝试使用以下方法:

 for(i in seq(from=1, to=2, by=0.2))

     score <- x * i

但这只会将 x 元素乘以 2.0。

欢迎任何有关如何完成此任务的建议。

【问题讨论】:

  • 您可能需要outer(x, scalar)
  • 这正是我所需要的。很简单,谢谢。

标签: r for-loop scalar


【解决方案1】:

带有outer 的选项,其中默认FUN*。根据?outer,用法是

外部(X, Y, FUN = "*", ...)

outer(x, scalar)

【讨论】:

    【解决方案2】:

    你可以的

    #Initialize matrix
    m = matrix(data = 0, nrow = length(x), ncol = length(scalar),
               dimnames = list(x = x, scalar = scalar), )
    
    #Fill in values
    for(i in seq_along(x)){
        for (j in seq_along(scalar)){
            m[i, j] = x[i] * scalar[j]
        }
    }
    m
    #    scalar
    #x     1.2  1.4  1.6  1  7  1.8  1.9  2
    #  1   1.2  1.4  1.6  1  7  1.8  1.9  2
    #  2   2.4  2.8  3.2  2 14  3.6  3.8  4
    #  3   3.6  4.2  4.8  3 21  5.4  5.7  6
    #  4   4.8  5.6  6.4  4 28  7.2  7.6  8
    #  5   6.0  7.0  8.0  5 35  9.0  9.5 10
    #  6   7.2  8.4  9.6  6 42 10.8 11.4 12
    #  7   8.4  9.8 11.2  7 49 12.6 13.3 14
    #  8   9.6 11.2 12.8  8 56 14.4 15.2 16
    #  9  10.8 12.6 14.4  9 63 16.2 17.1 18
    #  10 12.0 14.0 16.0 10 70 18.0 19.0 20
    

    当然,还有其他使用内置函数的方式,比如

    sapply(scalar, function(v1) sapply(x, function(v2) v1 * v2))
    

    【讨论】:

    • 外部函数似乎正是我所需要的,感谢您的回复。
    • sapply 不会是 sapply(scalar, *, x)
    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2021-01-11
    • 2014-08-27
    相关资源
    最近更新 更多