Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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中的colnames()函数-将表值视为独立对象/变量_R_Loops_Object_Instance Variables - Fatal编程技术网

R中的colnames()函数-将表值视为独立对象/变量

R中的colnames()函数-将表值视为独立对象/变量,r,loops,object,instance-variables,R,Loops,Object,Instance Variables,我有一个值列表,我想用它作为从某个网站上的单独URL中刮取的单独表的名称 > Fac_table [[1]] [1] "fulltime_fac_table" [[2]] [1] "parttime_fac_table" [[3]] [1] "honorary_fac_table" [[4]] [1] "retired_fac_table" 我想在列表中循环,自动生成4个具有各自名称的表 结果应该如下所示: > fulltime_fac_table 職稱

我有一个值列表,我想用它作为从某个网站上的单独URL中刮取的单独表的名称

> Fac_table
[[1]]
[1] "fulltime_fac_table"

[[2]]
[1] "parttime_fac_table"

[[3]]
[1] "honorary_fac_table"

[[4]]
[1] "retired_fac_table"
我想在列表中循环,自动生成4个具有各自名称的表

结果应该如下所示:

> fulltime_fac_table
    職稱          
V1  "教授兼系主任"
V2  "教授"        
V3  "教授"        
V4  "教授"        
V5  "特聘教授"    

> parttime_fac_table
    職稱       姓名    
V1  "教授"     "XXX"
V2  "教授"     "XXX"
V3  "教授"     "XXX"
V4  "教授"     "XXX"
V5  "教授"     "XXX"
V6  "教授"     "XXX"
varNamelist <- c("tbl1","tbl2","tbl3","tbl4")
colHeaderlist <- c("col1","col2","col3","col4")
tbl1 <- data.frame("col1"=c(1,2,3),
                   "col2"=c(4,5,6),
                   "col3"=c(7,8,9),
                   "col4"=c(10,11,12))
我有另一个名为“headers”的列表,其中包含在线各个表的列标题

> headers
[[1]]
[1] "職稱"             "姓名"             "    研究領域"
[4] "聯絡方式"        

[[2]]
[1] "職稱"     "姓名"     "研究領域" "聯絡方式"
我能够使用以下代码为各个表赋值:

> assign(eval(parse(text="Fac_table[[i]]")), as_tibble(matrix(fac_data,
> nrow = length(headers[[i]])))
这将生成一个填充的表,没有列标题,如下所示:

> honorary_fac_table
    [,1]       [,2]    
V1  "名譽教授" "XXX"
V2  "名譽教授" "XXX"
V3  "名譽教授" "XXX"
V4  "名譽教授" "XXX"
但无法为每个表分配列名

以下两种代码都不起作用:

> assign(colnames(eval(parse(text="Fac_table[1]"))), c(gsub("\\s", "", headers[[1]])))
Error in assign(colnames(eval(parse(text = "Fac_table[1]"))), c(gsub("\\s",  : 
  第一個引數不正確

> colnames(eval(parse(text="Fac_table[i]"))) <- c(gsub("\\s", "", headers[[i]]))
Error in colnames(eval(parse(text = "Fac_table[i]"))) <- c(gsub("\\s",  : 
  賦值目標擴充到非語言的物件

> do.call("<-", colnames(eval(parse(text="Fac_table[i]"))), c(gsub("\\s", "", headers[[i]])))
Error in do.call("<-", colnames(eval(parse(text = "Fac_table[i]"))), c(gsub("\\s",  : 
  second argument must be a list
但这并不是:

> colnames(as.name(varNamelist[[1]][1])) <- colHeaderlist[[1]]
Error in `colnames<-`(`*tmp*`, value = c("col1", "col2", "col3", "col4" : 
  attempt to set 'colnames' on an object with less than two dimensions

>colnames(as.name(varNamelist[[1]][1]))有一个解决方案,但是如果我理解正确,我认为当前的设置可能比必要的更复杂。因此,我将努力使这项任务更容易

如果你使用的是一维数据,我建议你使用向量,因为它们比列表更适合这个目的。因此,对于这个项目,我首先存储表和头的名称,如下所示:

> fulltime_fac_table
    職稱          
V1  "教授兼系主任"
V2  "教授"        
V3  "教授"        
V4  "教授"        
V5  "特聘教授"    

> parttime_fac_table
    職稱       姓名    
V1  "教授"     "XXX"
V2  "教授"     "XXX"
V3  "教授"     "XXX"
V4  "教授"     "XXX"
V5  "教授"     "XXX"
V6  "教授"     "XXX"
varNamelist <- c("tbl1","tbl2","tbl3","tbl4")
colHeaderlist <- c("col1","col2","col3","col4")
tbl1 <- data.frame("col1"=c(1,2,3),
                   "col2"=c(4,5,6),
                   "col3"=c(7,8,9),
                   "col4"=c(10,11,12))
如果它是一个选项来创建更接近于所示方式的表,那么这可能比使用如此多的列表和赋值函数更容易;这很快就会变得过于复杂

但如果您希望在最后将所有表存储在一个位置,可以将它们放在一个列表中:

tableList <– list(tbl1=tbl1,tbl2=tbl2,tbl3=tbl3,tbl4=tbl4)

str(tableList)
List of 4
 $ tbl1:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl2:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl3:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl4:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12

tableList有一个解决方案,但如果我理解正确,我认为当前的设置可能比必要的更复杂。因此,我将努力使这项任务更容易

如果你使用的是一维数据,我建议你使用向量,因为它们比列表更适合这个目的。因此,对于这个项目,我首先存储表和头的名称,如下所示:

> fulltime_fac_table
    職稱          
V1  "教授兼系主任"
V2  "教授"        
V3  "教授"        
V4  "教授"        
V5  "特聘教授"    

> parttime_fac_table
    職稱       姓名    
V1  "教授"     "XXX"
V2  "教授"     "XXX"
V3  "教授"     "XXX"
V4  "教授"     "XXX"
V5  "教授"     "XXX"
V6  "教授"     "XXX"
varNamelist <- c("tbl1","tbl2","tbl3","tbl4")
colHeaderlist <- c("col1","col2","col3","col4")
tbl1 <- data.frame("col1"=c(1,2,3),
                   "col2"=c(4,5,6),
                   "col3"=c(7,8,9),
                   "col4"=c(10,11,12))
如果它是一个选项来创建更接近于所示方式的表,那么这可能比使用如此多的列表和赋值函数更容易;这很快就会变得过于复杂

但如果您希望在最后将所有表存储在一个位置,可以将它们放在一个列表中:

tableList <– list(tbl1=tbl1,tbl2=tbl2,tbl3=tbl3,tbl4=tbl4)

str(tableList)
List of 4
 $ tbl1:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl2:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl3:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12
 $ tbl4:'data.frame':   3 obs. of  4 variables:
  ..$ col1: num [1:3] 1 2 3
  ..$ col2: num [1:3] 4 5 6
  ..$ col3: num [1:3] 7 8 9
  ..$ col4: num [1:3] 10 11 12

tableList我根据@Ryan的建议找到了一个变通解决方案,代码如下:

for (i in seq_along(url)){

  webpage <- read_html(url[i]) #loop through URL list to access html data

  fac_data <- html_nodes(webpage,'.tableunder')  %>% html_text()
  fac_data1 <- html_nodes(webpage,'.tableunder1')  %>% html_text()
  fac_data <- c(fac_data, fac_data1) #Store table data on each URL in a variable 

  x <- fac_data %>% matrix(ncol = length(headers[[i]]), byrow=TRUE) #make matrix to extract column data

  for (j in seq_along(headers[[i]])){
    y <- cbind(x[,j]) #extract column data and store in temporary variable
    colnames(y) <- as.character(headers[[i]][j]) #add column name
    print(cbind(y)) #loop through headers list to print column data in sequence. ** cbind(y) will be overwritten when I try to store the result on a list with 'z <- cbind(y)'.
  }
}
for(沿(url)顺序排列的i){

网页我根据@Ryan的建议找到了一个变通解决方案,代码如下:

for (i in seq_along(url)){

  webpage <- read_html(url[i]) #loop through URL list to access html data

  fac_data <- html_nodes(webpage,'.tableunder')  %>% html_text()
  fac_data1 <- html_nodes(webpage,'.tableunder1')  %>% html_text()
  fac_data <- c(fac_data, fac_data1) #Store table data on each URL in a variable 

  x <- fac_data %>% matrix(ncol = length(headers[[i]]), byrow=TRUE) #make matrix to extract column data

  for (j in seq_along(headers[[i]])){
    y <- cbind(x[,j]) #extract column data and store in temporary variable
    colnames(y) <- as.character(headers[[i]][j]) #add column name
    print(cbind(y)) #loop through headers list to print column data in sequence. ** cbind(y) will be overwritten when I try to store the result on a list with 'z <- cbind(y)'.
  }
}
for(沿(url)顺序排列的i){

网页我很想提供帮助,但请阅读关于提问的SO标准。这有助于简化要点。已适当添加了一个可复制的示例。谢谢。@RyanRunge,我只需要一个合适的占位符来在线存储给定的表,在保持URL列表之间的区别的同时循环浏览URL列表。它甚至可能不需要为各个表保留一个变量名列表是一个好主意。因此,如果您能想出更好的方法,请与我分享。联机表似乎没有单独的节点用于单独的字段。我感谢您花时间澄清您的问题。小规模示例更清楚。我想我是st我想知道您的大示例中的数据是什么格式的,以及为什么要在这个过程中使用列表和赋值函数。通常不会这样做,也不一定是不正确的,但是可能有一种更简单、更标准的方法来做您要做的事情。我编辑了我的答案,试图解释一些可能有用的工具我很乐意帮忙,但请阅读关于提问的SO标准。这有助于简化基本内容。已适当添加了一个可复制的示例。谢谢。@RyanRunge,我只需要一个合适的占位符来在线存储给定的表,在保持URL列表之间的区别的同时循环浏览URL列表。可能为各个表保留一个变量名列表甚至不是一个好主意。因此,如果您能想出更好的方法,请与我分享。联机表似乎没有单独的节点用于单独的字段。我感谢您花时间澄清您的问题。使用较小规模的示例更清楚uess我仍然想知道您的大示例中的数据是什么格式的,以及为什么您希望在这个过程中使用列表和赋值函数。这通常不是这样做的,也不一定是不正确的,但可能有一种更简单、更标准的方法来做您尝试做的事情。我编辑了我的答案,试图解释一些在这个过程中可能会有所帮助。我有一些基于我找到的解决方案的后续问题。但我认为我找不到一个可复制的例子。不知道你是否也能帮上忙?这是一个完全不同的问题。我有一些基于我找到的解决方案的后续问题。但我认为我找不到一个可复制的例子举个例子。不知道你是否也能帮上忙?这是一个完全不同的问题。如果你有后续问题,请将其作为单独的问题发布。谢谢。@Uwe,好的,注意到。如果你有后续问题,请将其作为单独的问题发布。谢谢。@Uwe,好的,注意到。