如果我们想要apply一个函子,也就是矩阵的每一行,但同时也想用该函数的行数作为参数,那该怎么办?例如,假设您想要得到矩阵的每一行中数字的第n根,其中n是行号。除了将行号绑定到初始矩阵之外,还有其他方法(仅使用apply )吗?
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)没有帮助:(谢谢。
发布于 2010-03-30 15:00:27
我通常所做的是在行号sapply上运行1:nrow(test)而不是test,并在函数中使用test[i,]:
t(sapply(1:nrow(test), function(i) test[i,]^(1/i)))不过,我不确定这是否真的有效率。
发布于 2015-01-23 02:15:12
如果您给函数命名,而不是使其匿名,则可以更容易地传递参数。我们可以使用nrow获取行数,并将行号的向量作为参数传递,以及以这种方式索引的帧。
为了清晰起见,我使用了一个不同的示例函数;对于一个2列矩阵,这个示例将x列乘以y列:
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)发布于 2010-03-31 15:27:11
实际上,在矩阵的情况下,您甚至不需要apply。只是:
test^(1/row(test))做你想做的事,我想。我认为row()函数是您正在寻找的东西。
https://stackoverflow.com/questions/2545879
复制相似问题