找不到对象使用r进行子集化时出错

时间:2017-03-07 15:48:32

标签: r

假设我有几个数据,我想分别对它们进行子集化。

n = c(1, 1, 1) 
s = c(55, 56, 57) 
q = c(99, 100, 101)
df_1 = data.frame(n, s, q)
df_2 = data.frame(n, s, q)
df_3 = data.frame(n, s, q) # assume they are the same.

  n  s   q
1 1 55  99
2 1 56 100
3 1 57 101

然后我创建一个循环来调用文件,

for (h in 1:3){    # for loop the file
  for (i in 1:1){  # i is for different values in column 'n'

    Result <- paste('ResultFile_',h,sep="")
    input <- paste('df_',h,sep="")

    Result <- subset(input,subset=n==i)[,c(2,3)]

DO SOMETHING HERE....

}
}

我希望当列'n'等于1时,我会得到第S列和第Q列。它会产生3个结果文件给我。

但它附带错误信息。

Error in subset.default(input, subset = n == i) : object 'n' not found

当我在此行subset(input,subset=n==i)[,c(2,3)]中直接将'input'替换为'df1'时,它可以正常工作。

为什么?

1 个答案:

答案 0 :(得分:2)

可以使用get函数传递字符串来调用对象。你可以尝试这样的事情:

input <- get(paste("df_", h, sep = ""))

现在inputdf_1的数据框相同,而不是字符串"df_1"

顺便说一下,如果要通过多个数据帧应用函数,可以创建所有数据框的列表,然后使用lapply来应用该函数。例如,如果您想要s == 56

的所有数据框的子集
data_list <- list(df_1, df_2, df_3)
data_list2 <- lapply(data_list, subset, subset = s == 56)

现在,所有结果数据框都存储在data_list2