我觉得我太累了,看不出错误。我编写了一个函数来从'for'循环中获取两个数据集的最大值:
plot_zu <- function(x) {for (i in 1:x){
z=data_raw[grep(a[i], data_raw$Gene.names),]
b=data_raw_ace[grep(a[i], data_raw_ace$Gene.names),]
p<-vector("numeric", length(1:length(a)))
p[i]<-max(z$t_test_diff)
return(p)}
}
想象一下:a是名称向量,数据集(data_raw(_ace))
由它过滤。最后,我希望在向量中包含列t_test_diff
的所有最大值。之后,我还想从data_raw_ace添加t_test_diff
列值。
问题是,我得到了这个:
[1] 1.210213 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
[8] 0.000000 0.000000
所以括号或其他东西有问题,但我看不到它(第一个值适合)。对不起,没有好的例子,但我认为这是可以理解的,也是一个容易解决的问题。
如果需要,我可以添加另一个例子。
非常感谢!!
感激不尽,
亨德里克
答案 0 :(得分:1)
看起来你通过在循环中定义它来覆盖每个新迭代中的p。
答案 1 :(得分:1)
在没有数据甚至是你对这个功能的调用的情况下,我将根据我的想法提供替代方案。您似乎只想选择那些“data_raw”行,其“Gene.names”列值在“a”定义的集合中。如果是这样,那就是:
z <- data_raw[ data_raw$Gene.names %in% a , ] # no loop needed
b <- data_raw_ace[ data_raw_ace$Gene.names %in% a , ] # again no loop needed
# Next step is unclear
如果你想在“[”里面使用grep或grepl,那么请使用sapply:
z <- data_raw[ sapply(a, grep, x= data_raw$Gene.names), ] # (still) no loop needed
b <- data_raw_ace[ sapply(a, grep, x= data_raw_ace$Gene.names), ]
当你这样做时,它需要什么?
p<-vector("numeric", length(1:length(a)))
p[i]<-max(z$t_test_diff)
如果您想要两个数据子集中具有相同名称的列的最大值,请执行以下操作:
p <- pmax( z$t_test_diff, b$t_test_diff )
基于你上面的进一步评论,我(现在)想想:
p <- apply( cbind(z$t_test_diff), abs(b$t_test_diff), 1, function(x) x[which.max(abs(x))])
答案 2 :(得分:0)
vapply
这样做,消除了for
循环。未经测试。
vapply(1:x, FUN.VALUE=numeric(1), FUN=function(x) {
z=data_raw[grep(a[i], data_raw$Gene.names),]
b=data_raw_ace[grep(a[i], data_raw_ace$Gene.names),] # Is this needed?
return(max(z$t_test_diff))
})