Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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_Data Cleaning_Sapply - Fatal编程技术网

R 不带';没有预定义的名称

R 不带';没有预定义的名称,r,data-cleaning,sapply,R,Data Cleaning,Sapply,我正在尝试编写一个函数,该函数将返回数据帧中所有二进制变量的索引,但预定义变量或提供的变量列表除外。您可以使用以下方法生成示例数据: data<-data.frame("RESPONSE" = sample(c("YES","NO"),100,replace = T), "FACTOR" = sample(c("YES","NO","MAYBE"),100,replace = T), "BINARY" = sample(c("YES","

我正在尝试编写一个函数,该函数将返回数据帧中所有二进制变量的索引,但预定义变量或提供的变量列表除外。您可以使用以下方法生成示例数据:

data<-data.frame("RESPONSE" = sample(c("YES","NO"),100,replace = T),
             "FACTOR" = sample(c("YES","NO","MAYBE"),100,replace = T),
             "BINARY" = sample(c("YES","NO"),100,replace = T),
             "NUMERIC" = sample(1:100,100,replace = T))
以及所有未命名为“响应”的变量列表,使用:

但是我要查找的输出忽略预定义的列或列列表,并将返回与您获得的相同的输出:

names(data)=="BINARY"

我认为在sappy函数中使用这两个条件,但是sappy中的names(x)返回空值。我知道这个问题很容易解决

我们可以使用
Map
base R

unlist(Map(function(x, y) nlevels(factor(x)) == 2 &
       y != response.variable.name, data, names(data)))
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 

或者使用
imap

library(tidyverse)
data %>% 
   imap_lgl(~ nlevels(.x) == 2 & .y != response.variable.name)
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 
##期望的结果?
名称(数据)=“二进制”
#[1]假假真假
##理想方法

response.variable.name您是否需要
sapply(data[setdiff(name(data),response.variable.name)],function(x)nlevels(as.factor(x))==2)
我想您只是在寻找
&
,就像这样<代码>sapply(数据,函数(x)NLEVELES(as.factor(x))==2)&!名称(数据)%在%response.variable.name中
如果您在给定示例输入的情况下共享您要查找的输出,这将非常有用……这非常有用。谢谢你抽出时间。
names(data)=="BINARY"
unlist(Map(function(x, y) nlevels(factor(x)) == 2 &
       y != response.variable.name, data, names(data)))
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 
library(tidyverse)
data %>% 
   imap_lgl(~ nlevels(.x) == 2 & .y != response.variable.name)
#  RESPONSE   FACTOR   BINARY  NUMERIC 
#   FALSE    FALSE     TRUE    FALSE 
## Desired result?
names(data)=="BINARY"
# [1] FALSE FALSE  TRUE FALSE

## Desired method
response.variable.name<-"RESPONSE"
sapply(data,function(x) nlevels(as.factor(x))==2) & !names(data) %in% response.variable.name
# RESPONSE   FACTOR   BINARY  NUMERIC 
#    FALSE    FALSE     TRUE    FALSE 
## same values, has names too (bonus!)
## wrap in `unname()` if you don't like names