【问题标题】:how can I solve Error in FUN(X[[i]], ...) : only defined on a data frame with all numeric variables如何解决 FUN(X[[i]], ...) 中的错误:仅在具有所有数值变量的数据帧上定义
【发布时间】:2021-06-21 13:32:46
【问题描述】:

我运行了这段代码,但是当我执行最后一行时会出现错误,我有 8 个数据集和 4 个 GPL 用于微阵列数据的元分析。

我的代码在这里:

ds.id<-c("GSE99039","GSE6613","GSE72267","GSE7621","GSE8397","GSE83977","GSE20141","GSE20163")
ds.plat<-c("GPL570","GPL96","GPL571","GPL97")
data.files<-paste0(ds.id,"_series_matrix.txt")
data.plat<-paste0(ds.plat,".txt")
suppressWarnings(raw <- lapply(data.files, read.delim, comment.char="!"))
raw <- lapply(raw, function(x) {rownames(x) <- x[,1]; x[,-1]})
data <- lapply(raw, function(x) {if(max(x) > 100) log2(x+1) else x})

【问题讨论】:

  • 您能检查一下您在哪些步骤中收到了该错误消息吗?
  • 最后一行:数据 100) log2(x+1) else x})
  • 检查 raw 的样子 (str(raw))。我很确定有些列不是数字的(即基因名称/id)。您必须在计算中排除这些,或者将它们移动到行名中。
  • 不清楚您要做什么。如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。用语言描述你想要做什么。你似乎在做max(x) 其中x 是一个不起作用的整个data.frame

标签: r dataframe


【解决方案1】:

出现错误是因为您在具有混合数据类型(数字、字符等)的数据帧上应用 max。当您在iris 上应用max 时,可以重现相同的错误。

max(iris)

FUN(X[[i]], ...) 中的错误: 仅在具有所有数值变量的数据框上定义

我认为您应该在数据框中的一列上应用 log2max 函数。例如,如果列名为col,您可以这样做。

result <- lapply(raw, function(x) {
  if(max(x$col) > 100) 
    x$col <- log2(x$col+1)
  x
})

【讨论】:

  • 我有 8 个数据集,第一个数据集有 220 列和 52220 行,其他数据集具有相同的维度。这些 data.frames 仅包含数字数据,并且行的名称是 prob-id (row.names=F)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多