假设我有几个数据,我想分别对它们进行子集化。
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'时,它可以正常工作。
为什么?
答案 0 :(得分:2)
可以使用get
函数传递字符串来调用对象。你可以尝试这样的事情:
input <- get(paste("df_", h, sep = ""))
现在input
与df_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
。