【问题标题】:translate C# code to R for converting table to vector将 C# 代码转换为 R 以将表格转换为矢量
【发布时间】:2011-11-19 01:41:24
【问题描述】:

我有一张这样的桌子:

12 34  45  45 56
23 45  56  77 77
14 94  15  45 56
15 38  25  84 65
72 35  35  4  57
18 14  45  47 56
42 34  55  55 59

我想在一个向量中得到列的总和

vector[0]= 12+23+14+15+72+18+42
vector[1]= 34+45+94+38+35+14+34
vector[2]= 45+56+15+25+35+45+55
vector[3]= 45+77+45+84+4 +47+55
vector[4]= 56+77+56+65+57+56+59

我在C# 中做了类似

for ( i = 0; i < columns; i++)
{
  vector[i] += reader.GetDouble(i);
}

reader在哪个元素中获取对应的元素

但是如何在R中做这种事情呢?

所以我会开始......

for(i in (1:columns))
{

}

【问题讨论】:

    标签: c# r code-translation


    【解决方案1】:
    colSums(x)
    

    apply(x,2,sum)
    

    如果你想更通用,效率更低。

    编辑:如果您想降低效率并使用for 循环,

    v <- numeric(ncol(x))
    for (i in seq(ncol(x))) {
       v[i] <- sum(x[,i])
    }
    

    我们可以通过 (1) 使用嵌套的 for 循环和 (2) 未能为向量预分配空间来继续降低效率 ...

    另见:

    【讨论】:

    • 我是否将其分配给向量? vector&lt;-colSums(x)
    • 有没有办法使用for循环,只是想知道?
    • @cMinor 如果您正在学习 R,最好在早期就改掉 for 循环的习惯。许多操作和函数已经为您向量化了。如果您发现自己正在编写一个 for 循环,那么很有可能已经有一个函数可以更有效地完成该任务(并且输入更少)。如果您发现自己正在编写嵌套的 for 循环,那么警钟应该真的响起。 (显然,它们在某些情况下是不可避免的,但仍然......)
    • @yoran:我不同意你应该尽量避免所有循环。使用循环可以提高代码的可读性和对算法的理解(从而避免错误)。通常,性能影响可以忽略不计(例如在蒙特卡洛分析中),您会成为 [scientopia.org/blogs/goodmath/2011/05/03/… 优化] 的受害者。
    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2022-01-23
    • 2020-09-02
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多