首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“应用”函数中的行/列计数器

“应用”函数中的行/列计数器
EN

Stack Overflow用户
提问于 2010-03-30 14:13:37
回答 5查看 27.2K关注 0票数 31

如果我们想要apply一个函子,也就是矩阵的每一行,但同时也想用该函数的行数作为参数,那该怎么办?例如,假设您想要得到矩阵的每一行中数字的第n根,其中n是行号。除了将行号绑定到初始矩阵之外,还有其他方法(仅使用apply )吗?

代码语言:javascript
复制
test <- data.frame(x=c(26,21,20),y=c(34,29,28))

t(apply(cbind(as.numeric(rownames(test)),test),1,function(x) x[2:3]^(1/x[1])))

实际上,如果test是一个矩阵:test <- matrix(c(26,21,20,34,29,28),nrow=3),行名(Test)没有帮助:(谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-30 15:00:27

我通常所做的是在行号sapply上运行1:nrow(test)而不是test,并在函数中使用test[i,]

代码语言:javascript
复制
t(sapply(1:nrow(test), function(i) test[i,]^(1/i)))

不过,我不确定这是否真的有效率。

票数 35
EN

Stack Overflow用户

发布于 2015-01-23 02:15:12

如果您给函数命名,而不是使其匿名,则可以更容易地传递参数。我们可以使用nrow获取行数,并将行号的向量作为参数传递,以及以这种方式索引的帧。

为了清晰起见,我使用了一个不同的示例函数;对于一个2列矩阵,这个示例将x列乘以y列:

代码语言:javascript
复制
test <- data.frame(x=c(26,21,20),y=c(34,29,28))
myfun <- function(position, df) {
    print(df[position,1] * df[position,2])
}

positions <- 1:nrow(test)
lapply(positions, myfun, test)
票数 3
EN

Stack Overflow用户

发布于 2010-03-31 15:27:11

实际上,在矩阵的情况下,您甚至不需要apply。只是:

代码语言:javascript
复制
test^(1/row(test))

做你想做的事,我想。我认为row()函数是您正在寻找的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2545879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档