【发布时间】:2020-04-02 16:00:01
【问题描述】:
我目前正在使用 cols 中的原始数字数据处理数据框。每列包含一个参数的数据(例如基因 xyz 的基因表达数据),而每一行包含一个主题。 cols 中的一些数据是正态分布的,而有些则远非正态分布。我使用 apply with margin 2 对不同的转换运行 shapiro 测试,然后通过比较 shapiro.test()$p.value 选择合适的转换。我将我的选择作为 char 发送到一个向量,给了我一个长度为 ncol(DataFrame) 的 NA、log10、sqrt 向量。我现在想知道是否可以通过应用函数将向量应用于数据帧,或者是否需要一个 for 循环。我该怎么做或有更好的方法?我想我可以循环 if-else 语句,但必须有更有效的方法,因为我的代码已经很慢了。
谢谢大家!
更新:我尝试了下面的代码,但它给了我“文件错误(文件名,“r”):无效的“描述”参数”
TransformedExampleDF <- apply(exampleDF, 2 , function(x) eval(parse(paste(transformationVector , "(" , x , ")" , sep = "" ))))
exampleDF <- as.data.frame(matrix(c(1,2,3,4,1,10,100,1000,0.1,0.2,0.3,0.4), ncol=3, nrow = 4))
transformationVector <- c(NA, "log10", NA)
【问题讨论】:
-
所以你想对每一列的数据应用不同的转换,参数来自你提到的向量?
-
正是。我有 3 种不同的“转换”。无(目前为 NA,但可以轻松更改)、log10 和 sqrt。该向量仅包含这 3 个不同的元素,其顺序是通过 apply 拟合 col-wise shapiro.tests 的结果。
标签: r