Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List - Fatal编程技术网

如何修改列表中的某些值(在R中)

如何修改列表中的某些值(在R中),r,list,R,List,我有一个列表,由几个具有特定结构的列表组成:字符、数字序列和字符: myList <- list(list("name1", c(2000,2001,2002), "suffix1"), list("name2", c(2000,2001,2002), "suffix2"), list("name3", c(2000,2001,2002), "suffix3") ) myList我们循环前两个列表元

我有一个列表,由几个具有特定结构的列表组成:字符、数字序列和字符:

myList <- list(list("name1", c(2000,2001,2002), "suffix1"),
               list("name2", c(2000,2001,2002), "suffix2"),
               list("name3", c(2000,2001,2002), "suffix3")
               )

myList我们循环前两个
列表
元素,检查元素是否为数字,然后获取值与2001:2002相交的
或返回对象

myList[1:2] <- lapply(myList[1:2], function(x) 
  lapply(x, function(y) if(is.numeric(y)) intersect(y, 2001:2002) else y))

myList[1:2]我们循环查看前两个
列表
元素,检查元素是否为数字,然后获取值与2001:2002相交的
或返回对象

myList[1:2] <- lapply(myList[1:2], function(x) 
  lapply(x, function(y) if(is.numeric(y)) intersect(y, 2001:2002) else y))
myList[1:2]
也许有完全不同的方法来解决这个问题

这里有一个建议:

library(data.table)
DT = rbindlist(rapply(myList, function(x) if (length(x)>1) list(x) else x, how="replace"))
setnames(DT,c("name","y","s"))
#     name              y       s
# 1: name1 2000,2001,2002 suffix1
# 2: name2 2000,2001,2002 suffix2
# 3: name3 2000,2001,2002 suffix3

DT[1:2, y := lapply(y, function(yy) yy[yy <= 2001] )]
#     name              y       s
# 1: name1      2000,2001 suffix1
# 2: name2      2000,2001 suffix2
# 3: name3 2000,2001,2002 suffix3
库(data.table)
DT=rbindlist(rappy(myList,函数(x)if(长度(x)>1)list(x)else x,how=“replace”))
集合名(DT,c(“名称”、“y”、“s”))
#姓名y s
#1:名称1 200020012002后缀1
#2:名称2 200020012002
#3:名称3 200020012002足够x3
DT[1:2,y:=lappy(y,函数(yy)yy[yy
也许有完全不同的方法来解决这个问题

这里有一个建议:

library(data.table)
DT = rbindlist(rapply(myList, function(x) if (length(x)>1) list(x) else x, how="replace"))
setnames(DT,c("name","y","s"))
#     name              y       s
# 1: name1 2000,2001,2002 suffix1
# 2: name2 2000,2001,2002 suffix2
# 3: name3 2000,2001,2002 suffix3

DT[1:2, y := lapply(y, function(yy) yy[yy <= 2001] )]
#     name              y       s
# 1: name1      2000,2001 suffix1
# 2: name2      2000,2001 suffix2
# 3: name3 2000,2001,2002 suffix3
库(data.table)
DT=rbindlist(rappy(myList,函数(x)if(长度(x)>1)list(x)else x,how=“replace”))
集合名(DT,c(“名称”、“y”、“s”))
#姓名y s
#1:名称1 200020012002后缀1
#2:名称2 200020012002
#3:名称3 200020012002足够x3

DT[1:2,y:=lappy(y,函数(yy)yy[yy一个两步程序,类似于akrun的答案:

inds <- lapply(myList, function(x) which(x[[2]] %in% 2002:2003)) 
myList2 <- lapply(1:length(myList), function(x) list(myList[[x]][[1]],
                                                     myList[[x]][[2]][-inds[[x]]],
                                                     myList[[x]][[3]]))

inds与akrun的答案类似的两步程序:

inds <- lapply(myList, function(x) which(x[[2]] %in% 2002:2003)) 
myList2 <- lapply(1:length(myList), function(x) list(myList[[x]][[1]],
                                                     myList[[x]][[2]][-inds[[x]]],
                                                     myList[[x]][[3]]))

inds您需要循环还是is
L您需要循环还是is
L