Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用r进行子集设置时未找到对象错误_R - Fatal编程技术网

使用r进行子集设置时未找到对象错误

使用r进行子集设置时未找到对象错误,r,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 然后我创建一个循环来调用文件 fo

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

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....

}
}
当我直接将这一行中的'input'替换为'df1'
子集(input,subset=n==I)[,c(2,3)]
,它就可以工作了


为什么

可以使用
get
函数传递字符串以调用对象。您可以尝试以下方法:

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

所有生成的数据帧现在都存储在
data\u list2

中。可以使用
get
函数传递字符串以调用对象。您可以尝试以下方法:

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

所有生成的数据帧现在都存储在
data\u list2

中。在您的示例中,
input
是使用
paste()
生成的字符串(使用
class(input)
进行验证)<代码>子集需要您传入data.frame。如果您有一组名为
df_1
df_2
df_3
的变量,这通常表明您在R中“出错”。您的data.frames应该在一个列表中,这样做更容易。有关更好的解决方案,请参见此问题:在您的示例中,
input
是使用
paste()
生成的字符串(使用
class(input)
验证)<代码>子集需要您传入data.frame。如果您有一组名为
df_1
df_2
df_3
的变量,这通常表明您在R中“出错”。您的data.frames应该在一个列表中,这样做更容易。查看此问题以获得更好的解决方案:感谢
get
方法,它工作得很好,@ycw,但是如何同时创建多个
ResultFile_
文件?(在我的例子中是3个结果文件)。您可以使用
mget
列表中创建多个数据集
@BigSecrect,您可以尝试
分配
功能。例如,在使用
子集创建
结果
数据帧后,添加以下代码
赋值(粘贴('ResultFile',h,sep=“”),Result)
。感谢
获取
方法,它工作正常,@ycw,但是如何同时创建多个
结果文件
文件?(在我的例子中是3个结果文件)。您可以使用
mget
列表中创建多个数据集
@BigSecrect,您可以尝试
分配
功能。例如,在使用
子集创建
结果
数据框后,添加以下代码
赋值(粘贴('ResultFile',h,sep=“”),结果)
data_list <- list(df_1, df_2, df_3)
data_list2 <- lapply(data_list, subset, subset = s == 56)