binary_subset<-function(a){
a_seq = lapply(a, seq, 0) # keep 0s as 0, make 1s c(1, 0)
subset=do.call(expand.grid, a_seq)
colnames(subset)=(1:length(a))
print(subset)
}
a<-c(0,0,1,0)
b<-c(1,0,0,0)
inter_a<-binary_subset(a)
inter_b<-binary_subset(b)
interactions_ab<-rbind(inter_a,inter_b)
interactions_no_duplicate<-unique(interactions_ab[1:length(a)])
> interactions_no_duplicate
1 2 3 4
1 0 0 1 0
2 0 0 0 0
3 1 0 0 0
inter_no_duplicate<-function(a,b){
inter_a<-binary_subset(a)
inter_b<-binary_subset(b)
interactions_ab<-rbind(inter_a,inter_b)
interactions_no_duplicate<-unique(interactions_ab[1:length(a)])
interactions_no_duplicate
}
> inter_no_duplicate(a,b)
1 2 3 4
1 0 0 1 0
2 0 0 0 0
1 2 3 4
1 1 0 0 0
2 0 0 0 0
1 2 3 4
1 0 0 1 0
2 0 0 0 0
3 1 0 0 0
我正在尝试编写is函数来获取一些二进制交互。首先,我以简单明了的形式编写了代码,并获得了所需的输出。但是,当我将所有内容放到函数中时,输出是不一样的。它包括一些额外的行(尽管我想要的输出在那里!)。第二个输出的最后3行是我的答案,它与第一个输出完全匹配。为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
您应该使用return(subset)
或仅在函数subset
底部使用binary_subset
,例如
binary_subset <- function(a) {
a_seq <- lapply(a, seq, 0) # keep 0s as 0, make 1s c(1, 0)
subset <- do.call(expand.grid, a_seq)
colnames(subset) <- (1:length(a))
return(subset)
}
或更短的一个
binary_subset <- function(a) {
a_seq <- lapply(a, seq, 0) # keep 0s as 0, make 1s c(1, 0)
`colnames<-`(do.call(expand.grid, a_seq),1:length(a))
}
答案 1 :(得分:0)
R函数返回最后一行,就像您的import java.util.Scanner;
public class AverageOfPositiveNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//Task is to keep count of positive integers, sum and calculate average
double pNumbers = 0;
int sum = 0;
//Task is to read user input and assign a variable
while (true) {
//Task is to prompt user for input
System.out.println("Enter number:");
int number = Integer.valueOf(scanner.nextLine());
//Task is to terminate the program when user inputs 0
if (number == 0) {
break;
}
if (number > 0) {
pNumbers = pNumbers + 1;
sum = sum + number;
}
}
//The task is to calculate the average
//print only if user has given numbers and avoid dividing by zero
if (sum + pNumbers > 0) {
double average = (sum / pNumbers);
System.out.println(average);
} else {
System.out.println("Cannot calculate the average");
}
}
}
函数或inter_no_duplicate()
(return()
)中的内容。
您要求return(interactions_no_duplicate)
打印子集,因此它将在控制台中打印。 binary_subset()
调用两次inter_no_duplicate()
,因此在binary_subset()
数据之前有两次打印。
如果尝试使用interactions_no_duplicate
,将在控制台中看到两个打印件,而test <- inter_no_duplicate(c(0, 0, 1, 0), c(1, 0, 0, 0))
将是您想要的数据。
如果要在控制台中打印,请删除test
或保留它,但至少应在print()
数据或变量的末尾添加return(subset)
。