下面的代码用于计算列的平均值的嵌套工作:
res <- list()
for(i in 1:nrow(df))
z <- df[i,]
z <- unlist(z)
z <- mean(z)
res[[i]] <- z
print(res)
字符串
但是,如果我尝试将代码转换为函数,输出列表中的每一列都是“NULL”,除了最后一列:
res <- list()
col.mean <- function(x){
for(i in 1:nrow(x))
z <- x[i,]
z <- unlist(z)
z <- mean(z)
res[[i]] <- z
return(res)
}
下面的函数似乎是工作,但我不明白它背后的逻辑。对我来说,这两个函数是相似的,除了后一个更简单。
res <- list()
col.mean <- function(x){
for(i in 1:nrow(x))
res[[i]] <- mean(unlist(x[i,]))
return(res)
}
2条答案
按热度按时间sdnqo3pr1#
我假设你想计算行的平均值。
1.
base R
中有一个函数,速度很快:rowMeans()
,详见help(rowMeans)
。**2.**For-loops并不是一种非常像
R
的方式。对你的循环做一些修改:字符串
封装成一个自编写的函数:
“
...
-parameter/argument”允许您在mean()
中指定参数,例如na.rm = TRUE
。**3.**在
R
中,我们经常使用*apply()
-函数(循环的 Package 器)而不是自写循环。这里我使用lapply()
,因为你似乎希望你的结果以列表格式存储。4.@Jilber Urbina在下面的评论中建议避免
unlist()
的替代方案:在一个名为“iris”的内置数据集上进行测试。我删除了非数字列。数据:
lf5gs5x22#
我相信这对我来说是可行的,只有很少的变化,如下所示
字符串