1

我想为我的 R 环境中的每个数据框添加一列,它们都具有相同的格式。我可以通过这样的简单分配创建我想要的列:

x[,8] <- x[,4]/(x[,4]+x[,5])

当我尝试将其放入将遍历环境中每个对象的 for 循环中时,出现错误。

控制数据 <- ls()

for (i in control_data) {(i[,8] <- i[,4]/(i[,4]+i[,5]))}

错误:“for(i in control_data){[”中出现意外的“[”

这是输入文件的样子:

ENSMUSG00000030088  Aldh1l1 chr6:90436420-90550197  1.5082200   3.130860    0.671814    0.0000000
ENSMUSG00000020932  Gfap    chr11:102748649-102762226   7.0861500   44.182700   20.901700   0.2320750
ENSMUSG00000024411  Aqp4    chr18:15547902-15562193 3.4920400   3.474880    2.463230    0.0331238
ENSMUSG00000023913  Pla2g7  chr17:43705046-43749150 1.5105400   24.275600   11.422400   1.5111100
ENSMUSG00000035805  Mlc1    chr15:88786313-88809437 1.9010200   7.147400    5.313190    0.6358940
ENSMUSG00000007682  Dio2    chr12:91962993-91976878 1.7322900   12.094200   6.738320    1.0736900
ENSMUSG00000017390  Aldoc   chr11:78136469-78141283 55.4562000  199.958000  91.328300   22.9541000
ENSMUSG00000005089  Slc1a2  chr2:102498815-102630941    63.7394000  130.729000  103.710000  10.0406000
ENSMUSG00000070880  Gad1    chr2:70391128-70440071  2.6501400   14.907500   13.730200   1.3992200
ENSMUSG00000026787  Gad2    chr2:22477724-22549394  3.9908200   11.308600   28.221500   1.4530500

感谢您提供的任何帮助。有没有更好的方法使用 apply 函数来做到这一点?

4

1 回答 1

2

正如评论中提到的,您的错误发生是因为调用的结果ls不是对象本身,而是它们作为字符串的名称。

要使用 for 循环,您将沿着这eval(parse(...))条路走下去。你也可以用apply一个函数来做到这一点。

myfun <- function(x) {
  df <- get(x)
  df[,8] <- df[,4] / (df[,4] + df[,5])
  return(df)
}

control_data <- ls()

lapply(control_data, myfun)

根据评论:

for(i in control_data) {
  df <- get(i)
  df[,8] <- df[,4] / (df[,4] + df[,5])
  assign(i, df)
}
于 2012-06-19T20:19:40.497 回答