我一直在尝试应用一种方法来设置值。我想要以下几点:
library(MADAM)
fisher.method(data.frame(0.0001879,2.2e-16))
## S num.p p.value p.adj
## 1 89.26501 2 0 0
但是,要使用的值位于我一次读取一行的文件中。如果我按照Convert comma separated string to integer in R的建议使用strsplit,我会得到:
oneLine <- "0.0001879, 2.2e-16"
fisher.method(data.frame(as.numeric(unlist(strsplit(oneLine, ",")))))
## S num.p p.value p.adj
## 1 17.15920 1 1.879000e-04 1.879000e-04
## 2 72.10581 1 2.220446e-16 4.440892e-16
我怎样才能达到预期效果?也就是说,从这些单独的值创建数据框?
答案 0 :(得分:0)
library(MADAM)
lapply(strsplit(oneLine, ","),
function(x) fisher.method(as.data.frame.list(as.numeric(x))))
#[[1]]
# S num.p p.value p.adj
#1 89.26501 2 0 0
如果您有vector
Lines <- c("0.0001879, 2.2e-16", "0.001435, 1.2e-14", "0.00014353, 2.5e-13")
do.call(rbind,lapply(strsplit(Lines, ","),
function(x) fisher.method(as.data.frame.list(as.numeric(x)))))
# S num.p p.value p.adj
# 1 89.26501 2 0.000000e+00 0.000000e+00
#11 77.20092 2 6.661338e-16 6.661338e-16
#12 75.73256 2 1.443290e-15 1.443290e-15
如果您正在阅读文件,例如file1.csv
的内容是
0.0001879, 2.2e-16
0.001435, 1.2e-14
0.00014353, 2.5e-13
然后,您可以使用read.csv
来阅读该文件,并将fisher.method
直接应用于两列data.frame
dat <- read.csv("file1.csv", header=FALSE)
fisher.method(dat)
# S num.p p.value p.adj
#1 89.26501 2 0.000000e+00 0.000000e+00
#2 77.20092 2 6.661338e-16 9.992007e-16
#3 75.73256 2 1.443290e-15 1.443290e-15