我正在尝试设置一个r函数,它将从列表中选择相关元素,最后以数据帧作为输出。
这是我正在使用的列表:
test_list<-list(set1=list(2, NA, NA, 8, NA, NA, 2), set2=list(4, 6, NA, NA, 2, 1, 1), set3=c(2, 3, 2, 1, NA, NA, NA))
对于列表中的每个元素,我只想保留包含少于4个NA元素的子列表。
这是我建立的功能:
is.useful <-function(x){ #x is a list of sublists
#I want to keep only the sublists with less than 4 NA elements
vector <-c()
for(i in x){
if(sum(is.na(x[[i]])) <= 3){
vector <-c(vector, unlist(x[[i]]))
}
}
return (vector)
}
运行qazxsw opi,我在x [[i]]中得到错误:输入'list'
我不明白这里的问题是因为:is.useful(test_list)
返回正确的答案4,sum(is.na(test_list[["set1"]]))
也给了我作为向量的子列表(unlist(test_list[["set1"]])
返回TRUE)
我还尝试了其他的东西,即使用以下命令将列表列表转换为数据帧:
is.vector(unlist(test_list[["set1"]]))
从那里,我尝试运行一个非常相似的功能,没有unlist:
dd <- as.data.frame(matrix(unlist(test_list), nrow=length(unlist(test_list[1]))))
is.useful2 <-function(x){ #x is dataframe
#I want to keep only the vectors with less than 4 NA elements
vector <-c()
for(i in x){
if(sum(is.na(x[i])) <= 3){
vector <-c(vector, (x[i]))
}
}
return (vector)
}
在is.useful2(dd)
(x,i)中返回错误:选择了未定义的列
我期待什么?在这个具体的例子中,我期望一个2个向量的数据帧,set2和set3,我有少于4个NA值。
我有点迷茫。我做错了什么 ?
非常感谢你的帮助。
希望这可以帮助:
[.data.frame