【问题标题】:Using apply on a Matrix在矩阵上使用 apply
【发布时间】:2013-12-20 05:05:46
【问题描述】:

我正在尝试将函数应用于 32 列。我有一个名为 nfl_data 的 32X32 矩阵,它是从 Excel 中读取的。似乎 apply 函数将能够将函数应用于所有列。我正在尝试将列的值相加并除以 13,然后取减少列的平均值。这是我的代码:

x <- solve(nfl_data)
rm <- apply(x, 2, function(i) round((1/13)*(sum(nfl_data[,i])) + mean(x[,i]),digits=2))

我收到一个错误:

.subset(x, j) 中的错误:只有 0 可能与负下标混合

另外,当我使用 str(rm) 时,我得到:

num [1:32] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...

我应该怎么做才能没有得到错误然后实际上有数值?

【问题讨论】:

  • 请通过添加显示问题的示例数据使其可重现。

标签: r apply


【解决方案1】:

在不查看您的数据的情况下,我模拟如下并提供一种解决方案。对于在您的 OP 中使用 apply 的错误,我认为您可能同时具有正索引和负索引。

# simulate the dataset:
nfl_data = rnorm(n=32*32, mean=4, sd=0.5)  
nfl_data = matrix(nfl_data, nr=32, nc=32)
head(nfl_data)

# your codes:
x <- solve(nfl_data)
myfun = function(i) round( (1/13)*(sum(nfl_data[,i])) + mean(x[,i]), digits=2 )

# alternative way:
rm = numeric(32)
for (i in 1:32){
  rm[i]=myfun(i)
}

# check results:
rm

【讨论】:

  • 使用rm 作为数据对象名称似乎相当不明智。
猜你喜欢
  • 2012-10-01
  • 2020-10-30
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多